diff --git a/src/commands/serverCommand.ts b/src/commands/serverCommand.ts index 9c030481..571d563c 100644 --- a/src/commands/serverCommand.ts +++ b/src/commands/serverCommand.ts @@ -1088,7 +1088,7 @@ export function writeQueryResultsToView( duration?: string, isFromConnTree?: boolean, ): void { - commands.executeCommand("kdb.resultsPanel.update", result, isInsights, type); + commands.executeCommand("kdb.resultsPanel.update", result, isInsights); if (!checkIfIsDatasource(type)) { addQueryHistory( query, diff --git a/src/extension.ts b/src/extension.ts index 973beb1c..05c51176 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -204,12 +204,8 @@ export async function activate(context: ExtensionContext) { ), commands.registerCommand( "kdb.resultsPanel.update", - (results: string, isInsights: boolean, dataSourceType?: string) => { - ext.resultsViewProvider.updateResults( - results, - isInsights, - dataSourceType, - ); + (results: string, isInsights: boolean) => { + ext.resultsViewProvider.updateResults(results, isInsights); }, ), commands.registerCommand("kdb.resultsPanel.clear", () => { diff --git a/src/services/resultsPanelProvider.ts b/src/services/resultsPanelProvider.ts index ab7d1058..eed8071c 100644 --- a/src/services/resultsPanelProvider.ts +++ b/src/services/resultsPanelProvider.ts @@ -23,11 +23,13 @@ import { ext } from "../extensionVariables"; import * as utils from "../utils/execution"; import { getNonce } from "../utils/getNonce"; import { getUri } from "../utils/getUri"; +import { kdbOutputLog } from "../utils/core"; export class KdbResultsViewProvider implements WebviewViewProvider { public static readonly viewType = "kdb-results"; - private _view?: WebviewView; + public isInsights = false; public _colorTheme: any; + private _view?: WebviewView; private _results: string | string[] = ""; constructor(private readonly _extensionUri: Uri) { @@ -48,10 +50,11 @@ export class KdbResultsViewProvider implements WebviewViewProvider { localResourceRoots: [Uri.joinPath(this._extensionUri, "out")], }; - webviewView.webview.html = this._getWebviewContent(""); + webviewView.webview.html = this._getWebviewContent(); + this.updateWebView(""); webviewView.webview.onDidReceiveMessage((data) => { - webviewView.webview.html = this._getWebviewContent(data); + this.updateWebView(data); }); webviewView.onDidChangeVisibility(() => { ext.isResultsTabVisible = webviewView.visible; @@ -62,19 +65,11 @@ export class KdbResultsViewProvider implements WebviewViewProvider { }); } - public updateResults( - queryResults: any, - isInsights?: boolean, - dataSourceType?: string, - ) { + public updateResults(queryResults: any, isInsights?: boolean) { if (this._view) { this._view.show?.(true); - this._view.webview.postMessage(queryResults); - this._view.webview.html = this._getWebviewContent( - queryResults, - isInsights, - dataSourceType, - ); + this.isInsights = !!isInsights; + this.updateWebView(queryResults); } } @@ -176,7 +171,7 @@ export class KdbResultsViewProvider implements WebviewViewProvider { } } - convertToGrid(results: any, isInsights: boolean): string { + convertToGrid(results: any, isInsights: boolean): any { const queryResult = isInsights ? results.rows : results; const columnDefs = this.generateCoumnDefs(results, isInsights); @@ -199,7 +194,7 @@ export class KdbResultsViewProvider implements WebviewViewProvider { if (rowData.length > 0) { ext.resultPanelCSV = this.convertToCsv(rowData).join("\n"); } - return JSON.stringify({ + return { defaultColDef: { sortable: true, resizable: true, @@ -217,7 +212,7 @@ export class KdbResultsViewProvider implements WebviewViewProvider { suppressContextMenu: true, suppressDragLeaveHidesColumns: true, tooltipShowDelay: 200, - }); + }; } isVisible(): boolean { @@ -251,13 +246,39 @@ export class KdbResultsViewProvider implements WebviewViewProvider { : ""; } - private _getWebviewContent( - queryResult: any, - isInsights?: boolean, - _dataSourceType?: string, - ) { + public updateWebView(queryResult: any) { ext.resultPanelCSV = ""; this._results = queryResult; + let result = ""; + let gridOptions = undefined; + if (!this._view) { + kdbOutputLog("[Results Tab] No view to update", "ERROR"); + return; + } + if (typeof queryResult === "string" || typeof queryResult === "number") { + result = + queryResult !== "" + ? `
${queryResult
+ .toString()
+ .replace(/\n/g, "
")}
No results to show
"; + } else if (queryResult) { + gridOptions = this.convertToGrid(queryResult, this.isInsights); + } + if (gridOptions) { + this._view.webview.postMessage({ + command: "setGridOptions", + gridOptions: gridOptions, + }); + } else { + this._view.webview.postMessage({ + command: "setResultsContent", + results: result, + }); + } + } + + private _getWebviewContent() { const agGridTheme = this.defineAgGridTheme(); if (this._view) { const webviewUri = getUri(this._view.webview, this._extensionUri, [ @@ -265,70 +286,82 @@ export class KdbResultsViewProvider implements WebviewViewProvider { "webview.js", ]); const nonce = getNonce(); - let result = ""; - let gridOptionsString = ""; + return /*html*/ ` + + + + + + + + + + +