From 1be3ca3bd906aef4434e8c210f31b6932e6920e1 Mon Sep 17 00:00:00 2001 From: Tim Kmecl Date: Wed, 7 Dec 2022 10:36:31 +0100 Subject: [PATCH] minor UX improvements --- package.json | 2 +- src/extension.ts | 36 +++++++++++++++--------------- src/test/runTest.ts | 23 ------------------- src/test/suite/extension.test.ts | 15 ------------- src/test/suite/index.ts | 38 -------------------------------- yarn.lock | 6 ++--- 6 files changed, 22 insertions(+), 98 deletions(-) delete mode 100644 src/test/runTest.ts delete mode 100644 src/test/suite/extension.test.ts delete mode 100644 src/test/suite/index.ts diff --git a/package.json b/package.json index 7b3c3d7..63432d4 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ { "command": "chatgpt.ask", "when": "editorTextFocus", - "group": "navigation" + "group": "chatgpt-menu-group@1" } ] } diff --git a/src/extension.ts b/src/extension.ts index 4440cd4..3fadff0 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -17,7 +17,10 @@ export function activate(context: vscode.ExtensionContext) { provider.setSessionToken(sessionToken); context.subscriptions.push( - vscode.window.registerWebviewViewProvider(ChatGPTViewProvider.viewType, provider)); + vscode.window.registerWebviewViewProvider(ChatGPTViewProvider.viewType, provider, { + webviewOptions: { retainContextWhenHidden: true } + }) + ); let disposable2 = vscode.commands.registerCommand('chatgpt.ask', () => { vscode.window.showInputBox({ prompt: 'What do you want to do?' }).then((value) => { @@ -54,6 +57,7 @@ class ChatGPTViewProvider implements vscode.WebviewViewProvider { private _chatGPTAPI?: ChatGPTAPI; private _response?: string; + private _prompt?: string; private _sessionToken?: string; @@ -117,16 +121,10 @@ class ChatGPTViewProvider implements vscode.WebviewViewProvider { } } }); - - // when extension panel opens shows the previous response again - webviewView.onDidChangeVisibility(e => { - if (this._view && this._view.visible) { - this._view.webview.postMessage({ type: 'addResponse', value: this._response }); - } - }); } public async search(prompt:string|undefined) { + this._prompt = prompt; if (!prompt) { prompt = ''; }; @@ -136,6 +134,14 @@ class ChatGPTViewProvider implements vscode.WebviewViewProvider { this._newAPI(); } + // focus gpt activity from activity bar + if (!this._view) { + await vscode.commands.executeCommand('chatgpt.chatView.focus'); + } else { + this._view?.show?.(true); + } + + let response = ''; // Check if the ChatGPTAPI instance is signed in @@ -171,15 +177,11 @@ class ChatGPTViewProvider implements vscode.WebviewViewProvider { searchPrompt = prompt; } - // focus gpt activity from activity bar - vscode.commands.executeCommand('workbench.view.extension.chatgpt'); - - // modify the input tag to show the search prompt as input value - if (this._view) { - this._view.webview.postMessage({ type: 'setPrompt', value: searchPrompt }); - } - console.log("sendMessage"); + + // Make sure theprompt is shown + this._view?.webview.postMessage({ type: 'setPrompt', value: this._prompt }); + // Send the search prompt to the ChatGPTAPI instance and store the response response = await this._chatGPTAPI.sendMessage(searchPrompt, { onProgress: (partialResponse) => { @@ -193,8 +195,6 @@ class ChatGPTViewProvider implements vscode.WebviewViewProvider { // Saves the response this._response = response; - // console.log(response); - // Show the view and send a message to the webview with the response if (this._view) { this._view.show?.(true); diff --git a/src/test/runTest.ts b/src/test/runTest.ts deleted file mode 100644 index 27b3ceb..0000000 --- a/src/test/runTest.ts +++ /dev/null @@ -1,23 +0,0 @@ -import * as path from 'path'; - -import { runTests } from '@vscode/test-electron'; - -async function main() { - try { - // The folder containing the Extension Manifest package.json - // Passed to `--extensionDevelopmentPath` - const extensionDevelopmentPath = path.resolve(__dirname, '../../'); - - // The path to test runner - // Passed to --extensionTestsPath - const extensionTestsPath = path.resolve(__dirname, './suite/index'); - - // Download VS Code, unzip it and run the integration test - await runTests({ extensionDevelopmentPath, extensionTestsPath }); - } catch (err) { - console.error('Failed to run tests'); - process.exit(1); - } -} - -main(); diff --git a/src/test/suite/extension.test.ts b/src/test/suite/extension.test.ts deleted file mode 100644 index 4ca0ab4..0000000 --- a/src/test/suite/extension.test.ts +++ /dev/null @@ -1,15 +0,0 @@ -import * as assert from 'assert'; - -// You can import and use all API from the 'vscode' module -// as well as import your extension to test it -import * as vscode from 'vscode'; -// import * as myExtension from '../../extension'; - -suite('Extension Test Suite', () => { - vscode.window.showInformationMessage('Start all tests.'); - - test('Sample test', () => { - assert.strictEqual(-1, [1, 2, 3].indexOf(5)); - assert.strictEqual(-1, [1, 2, 3].indexOf(0)); - }); -}); diff --git a/src/test/suite/index.ts b/src/test/suite/index.ts deleted file mode 100644 index 7029e38..0000000 --- a/src/test/suite/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -import * as path from 'path'; -import * as Mocha from 'mocha'; -import * as glob from 'glob'; - -export function run(): Promise { - // Create the mocha test - const mocha = new Mocha({ - ui: 'tdd', - color: true - }); - - const testsRoot = path.resolve(__dirname, '..'); - - return new Promise((c, e) => { - glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { - if (err) { - return e(err); - } - - // Add files to the test suite - files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); - - try { - // Run the mocha test - mocha.run(failures => { - if (failures > 0) { - e(new Error(`${failures} tests failed.`)); - } else { - c(); - } - }); - } catch (err) { - console.error(err); - e(err); - } - }); - }); -} diff --git a/yarn.lock b/yarn.lock index 6244d41..d985d1a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -274,9 +274,9 @@ "eslint-visitor-keys" "^3.3.0" "@vscode/test-electron@^2.2.0": - "integrity" "sha512-xk2xrOTMG75/hxO8OVVZ+GErv9gmdZwOD8rEHV3ty3n1Joav2yFcfrmqD6Ukref27U13LEL8gVvSHzauGAK5nQ==" - "resolved" "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.2.0.tgz" - "version" "2.2.0" + "integrity" "sha512-DUdwSYVc9p/PbGveaq20dbAAXHfvdq4zQ24ILp6PKizOBxrOfMsOq8Vts5nMzeIo0CxtA/RxZLFyDv001PiUSg==" + "resolved" "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.2.1.tgz" + "version" "2.2.1" dependencies: "http-proxy-agent" "^4.0.1" "https-proxy-agent" "^5.0.0"