Skip to content

Commit 4c11fd0

Browse files
load optional table view config on restore and vscode reload (#64)
1 parent 28f81c5 commit 4c11fd0

File tree

3 files changed

+43
-12
lines changed

3 files changed

+43
-12
lines changed

src/views/tableView.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export class TableView {
5050
private _totalRows: number = 0;
5151
private _loadTime: number = 0; // load time in milliseconds
5252
private _loadedDataPage: number = 0;
53+
private _tableConfig: any = {};
5354

5455

5556
// TODO: move the settings below to tabular data viewer config options later
@@ -65,8 +66,10 @@ export class TableView {
6566
* @param extensionUri Extension directory Uri.
6667
* @param documentUri Data document Uri.
6768
* @param webviewPanel Optional webview panel instance.
69+
* @param tableConfig Table view config to restore.
6870
*/
69-
public static render(extensionUri: Uri, documentUri: Uri, webviewPanel?: WebviewPanel) {
71+
public static render(extensionUri: Uri, documentUri: Uri,
72+
webviewPanel?: WebviewPanel, tableConfig?: any) {
7073
// create table view Uri
7174
const viewUri: Uri = documentUri.with({ scheme: 'tabular-data' });
7275
console.log('tabular.data.view:render(): loading table view:', viewUri.toString(true)); // skip encoding
@@ -97,7 +100,7 @@ export class TableView {
97100
path.join(extensionUri.fsPath, './resources/icons/tabular-data-viewer.svg'));
98101

99102
// set as current table view
100-
TableView.currentView = new TableView(webviewPanel, extensionUri, documentUri);
103+
TableView.currentView = new TableView(webviewPanel, extensionUri, documentUri, tableConfig);
101104
}
102105
}
103106

@@ -131,11 +134,20 @@ export class TableView {
131134
* @param webviewPanel Reference to the webview panel.
132135
* @param extensionUri Extension directory Uri.
133136
* @param documentUri Data document Uri.
137+
* @param tableConfig Optional table view config to restore.
134138
*/
135-
private constructor(webviewPanel: WebviewPanel, extensionUri: Uri, documentUri: Uri) {
139+
private constructor(webviewPanel: WebviewPanel, extensionUri: Uri,
140+
documentUri: Uri, tableConfig?: any) {
141+
142+
// save webview panel and extension uri
136143
this._webviewPanel = webviewPanel;
137144
this._extensionUri = extensionUri;
138145

146+
if (tableConfig) {
147+
// save table view config to restore
148+
this._tableConfig = tableConfig;
149+
}
150+
139151
// create new file info for the data source
140152
this._fileInfo = new FileInfo(documentUri);
141153
statusBar.showFileStats(this._fileInfo);
@@ -234,6 +246,7 @@ export class TableView {
234246
/*
235247
this.webviewPanel.webview.postMessage({
236248
command: 'createTable',
249+
tableConfig: this._tableConfig,
237250
tableSchema: this._tableSchema
238251
}); */
239252

@@ -323,6 +336,7 @@ export class TableView {
323336
command: 'refresh',
324337
fileName: this._fileInfo.fileName,
325338
documentUrl: this._fileInfo.fileUri.toString(),
339+
tableConfig: this._tableConfig,
326340
tableSchema: this._tableSchema,
327341
totalRows: this._totalRows,
328342
tableData: initialDataRows

src/views/tableViewSerializer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,6 @@ export class TableViewSerializer implements WebviewPanelSerializer {
4343
async deserializeWebviewPanel(webviewPanel: WebviewPanel, state: any) {
4444
const documentUri: Uri = Uri.parse(state.documentUrl);
4545
console.log('tabular.data.viewer:deserializeWeviewPanel(): documentUrl:', documentUri.toString());
46-
TableView.render(this.extensionUri, documentUri, webviewPanel);
46+
TableView.render(this.extensionUri, documentUri, webviewPanel, state.tableConfig);
4747
}
4848
}

web/scripts/tableView.js

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -104,13 +104,7 @@ window.addEventListener('message', event => {
104104
createTable(event.data.tableSchema);
105105
break;
106106
case 'refresh':
107-
documentUrl = event.data.documentUrl;
108-
fileName = event.data.fileName;
109-
viewState.documentUrl = documentUrl;
110-
vscode.setState(viewState);
111-
tableSchema = event.data.tableSchema;
112-
tableData = event.data.tableData;
113-
totalRows = event.data.totalRows;
107+
updateViewState(event.data);
114108
loadData(tableData, tableSchema);
115109
break;
116110
case 'addData':
@@ -167,6 +161,29 @@ function initializeView() {
167161
vscode.postMessage({ command: 'refresh' });
168162
}
169163

164+
/**
165+
* Updates table view state on initial data load and refresh.
166+
*
167+
* @param {*} tableInfo Table data and config info from webview.
168+
*/
169+
function updateViewState(tableInfo) {
170+
documentUrl = tableInfo.documentUrl;
171+
fileName = tableInfo.fileName;
172+
tableSchema = tableInfo.tableSchema;
173+
tableData = tableInfo.tableData;
174+
totalRows = tableInfo.totalRows;
175+
176+
if (tableInfo.tableConfig.columns) {
177+
// update table config
178+
tableConfig = tableInfo.tableConfig;
179+
viewState.tableConfig = tableConfig;
180+
}
181+
viewState.documentUrl = documentUrl;
182+
183+
// save updated view state
184+
vscode.setState(viewState);
185+
}
186+
170187
/**
171188
* Reloads table view data.
172189
*
@@ -451,7 +468,7 @@ function saveTableSetting(id, type, data) {
451468
const tableSettingKey = `${id}-${type}`;
452469
console.log(`tableView.saveTableSetting(): ${tableSettingKey}=`, data);
453470

454-
// save table settings in local storage for now
471+
// save table setting in local storage
455472
localStorage.setItem(tableSettingKey, JSON.stringify(data));
456473

457474
if (viewState.tableConfig === undefined) {

0 commit comments

Comments
 (0)