Skip to content

Commit

Permalink
load optional table view config on restore and vscode reload (#64)
Browse files Browse the repository at this point in the history
  • Loading branch information
RandomFractals committed Jan 10, 2022
1 parent 28f81c5 commit 4c11fd0
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 12 deletions.
20 changes: 17 additions & 3 deletions src/views/tableView.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ export class TableView {
private _totalRows: number = 0;
private _loadTime: number = 0; // load time in milliseconds
private _loadedDataPage: number = 0;
private _tableConfig: any = {};


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

// set as current table view
TableView.currentView = new TableView(webviewPanel, extensionUri, documentUri);
TableView.currentView = new TableView(webviewPanel, extensionUri, documentUri, tableConfig);
}
}

Expand Down Expand Up @@ -131,11 +134,20 @@ export class TableView {
* @param webviewPanel Reference to the webview panel.
* @param extensionUri Extension directory Uri.
* @param documentUri Data document Uri.
* @param tableConfig Optional table view config to restore.
*/
private constructor(webviewPanel: WebviewPanel, extensionUri: Uri, documentUri: Uri) {
private constructor(webviewPanel: WebviewPanel, extensionUri: Uri,
documentUri: Uri, tableConfig?: any) {

// save webview panel and extension uri
this._webviewPanel = webviewPanel;
this._extensionUri = extensionUri;

if (tableConfig) {
// save table view config to restore
this._tableConfig = tableConfig;
}

// create new file info for the data source
this._fileInfo = new FileInfo(documentUri);
statusBar.showFileStats(this._fileInfo);
Expand Down Expand Up @@ -234,6 +246,7 @@ export class TableView {
/*
this.webviewPanel.webview.postMessage({
command: 'createTable',
tableConfig: this._tableConfig,
tableSchema: this._tableSchema
}); */

Expand Down Expand Up @@ -323,6 +336,7 @@ export class TableView {
command: 'refresh',
fileName: this._fileInfo.fileName,
documentUrl: this._fileInfo.fileUri.toString(),
tableConfig: this._tableConfig,
tableSchema: this._tableSchema,
totalRows: this._totalRows,
tableData: initialDataRows
Expand Down
2 changes: 1 addition & 1 deletion src/views/tableViewSerializer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,6 @@ export class TableViewSerializer implements WebviewPanelSerializer {
async deserializeWebviewPanel(webviewPanel: WebviewPanel, state: any) {
const documentUri: Uri = Uri.parse(state.documentUrl);
console.log('tabular.data.viewer:deserializeWeviewPanel(): documentUrl:', documentUri.toString());
TableView.render(this.extensionUri, documentUri, webviewPanel);
TableView.render(this.extensionUri, documentUri, webviewPanel, state.tableConfig);
}
}
33 changes: 25 additions & 8 deletions web/scripts/tableView.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,13 +104,7 @@ window.addEventListener('message', event => {
createTable(event.data.tableSchema);
break;
case 'refresh':
documentUrl = event.data.documentUrl;
fileName = event.data.fileName;
viewState.documentUrl = documentUrl;
vscode.setState(viewState);
tableSchema = event.data.tableSchema;
tableData = event.data.tableData;
totalRows = event.data.totalRows;
updateViewState(event.data);
loadData(tableData, tableSchema);
break;
case 'addData':
Expand Down Expand Up @@ -167,6 +161,29 @@ function initializeView() {
vscode.postMessage({ command: 'refresh' });
}

/**
* Updates table view state on initial data load and refresh.
*
* @param {*} tableInfo Table data and config info from webview.
*/
function updateViewState(tableInfo) {
documentUrl = tableInfo.documentUrl;
fileName = tableInfo.fileName;
tableSchema = tableInfo.tableSchema;
tableData = tableInfo.tableData;
totalRows = tableInfo.totalRows;

if (tableInfo.tableConfig.columns) {
// update table config
tableConfig = tableInfo.tableConfig;
viewState.tableConfig = tableConfig;
}
viewState.documentUrl = documentUrl;

// save updated view state
vscode.setState(viewState);
}

/**
* Reloads table view data.
*
Expand Down Expand Up @@ -451,7 +468,7 @@ function saveTableSetting(id, type, data) {
const tableSettingKey = `${id}-${type}`;
console.log(`tableView.saveTableSetting(): ${tableSettingKey}=`, data);

// save table settings in local storage for now
// save table setting in local storage
localStorage.setItem(tableSettingKey, JSON.stringify(data));

if (viewState.tableConfig === undefined) {
Expand Down

0 comments on commit 4c11fd0

Please # to comment.