@@ -21,7 +21,8 @@ import * as fileUtils from '../utils/fileUtils';
21
21
import { FileTypes } from './fileTypes' ;
22
22
import { ViewTypes } from './viewTypes' ;
23
23
24
- const d3 = require ( 'd3-dsv' ) ;
24
+ // eslint-disable-next-line @typescript-eslint/naming-convention
25
+ const { Table} = require ( 'tableschema' ) ;
25
26
26
27
/**
27
28
* Defines Table view class for managing state and behaviour of Table webview panels.
@@ -57,9 +58,12 @@ export class TableView {
57
58
* @param webviewPanel Optional webview panel instance.
58
59
*/
59
60
public static render ( extensionUri : Uri , documentUri : Uri , webviewPanel ?: WebviewPanel ) {
61
+ // create table view Uri
60
62
const viewUri : Uri = documentUri . with ( { scheme : 'tabular-data' } ) ;
61
- console . log ( 'tabular.data.view:render(): loading table view:' , viewUri . toString ( ) ) ;
62
- console . log ( '\tdocumentUri:' , documentUri ) ;
63
+ console . log ( 'tabular.data.view:render(): loading table view:' , viewUri . toString ( true ) ) ; // skip encoding
64
+ // console.log('\tdocumentUri:', documentUri);
65
+
66
+ // check for open table view
63
67
const tableView : TableView | undefined = TableView . _views . get ( viewUri . toString ( ) ) ;
64
68
if ( tableView ) {
65
69
// show loaded table webview panel in the active editor view column
@@ -190,31 +194,29 @@ export class TableView {
190
194
this . _currentDataPage = 0 ;
191
195
this . _tableData = [ ] ;
192
196
193
- // load data
194
- workspace . fs . readFile ( this . _documentUri ) . then ( ( binaryData : Uint8Array ) => {
195
- const textData : string = new TextDecoder ( ) . decode ( binaryData ) ;
196
- // this.logTextData(textData);
197
-
198
- // parse dsv data for now
199
- const dsvParser = d3 . dsvFormat ( this . delimiter ) ;
200
- let tableData : any = dsvParser . parse ( textData , d3 . autoType ) ;
201
- this . logTableData ( tableData ) ;
202
-
203
- // save table data for data streaming later
204
- this . _tableData = tableData ;
205
- this . _totalRows = this . _tableData . length ;
206
-
207
- // send initial data rows to table view for display
208
- const initialDataRows : Array < any > = tableData . slice ( 0 , Math . min ( this . _pageDataSize , this . _totalRows ) ) ;
209
- this . webviewPanel . webview . postMessage ( {
210
- command : 'refresh' ,
211
- fileName : this . _fileName ,
212
- documentUrl : this . _documentUri . toString ( ) ,
213
- tableData : initialDataRows ,
214
- totalRows : this . _totalRows
215
- } ) ;
216
- } , reason => {
217
- window . showErrorMessage ( `Could not load \`${ this . _documentUri } \` content. Reason: \n ${ reason } ` ) ;
197
+ // load tabular data file
198
+ const table = await Table . load ( this . _documentUri . fsPath ) ;
199
+
200
+ // infer table shema
201
+ const tableInfo = await table . infer ( ) ;
202
+ console . log ( 'tabular.data.view:tableInfo:' , tableInfo ) ;
203
+
204
+ // read all table data rows
205
+ const tableData : [ ] = await table . read ( { keyed : true } ) ;
206
+ this . logTableData ( tableData , table . headers ) ;
207
+
208
+ // save table data for incrementally loading into table view later
209
+ this . _tableData = tableData ;
210
+ this . _totalRows = this . _tableData . length ;
211
+
212
+ // send initial set of data rows to table view for display
213
+ const initialDataRows : Array < any > = tableData . slice ( 0 , Math . min ( this . _pageDataSize , this . _totalRows ) ) ;
214
+ this . webviewPanel . webview . postMessage ( {
215
+ command : 'refresh' ,
216
+ fileName : this . _fileName ,
217
+ documentUrl : this . _documentUri . toString ( ) ,
218
+ tableData : initialDataRows ,
219
+ totalRows : this . _totalRows
218
220
} ) ;
219
221
}
220
222
@@ -288,10 +290,12 @@ export class TableView {
288
290
*
289
291
* @param tableData Parsed table data.
290
292
*/
291
- private logTableData ( tableData : any ) : void {
293
+ private logTableData ( tableData : any , columns ?: [ ] ) : void {
292
294
console . log ( 'tabular.data.view:rowCount:' , tableData . length ) ;
293
- console . log ( '\tcolumns:' , tableData . columns ) ;
294
- // console.log('1st 10 rows:', tableData.slice(0, 10));
295
+ if ( columns ) {
296
+ console . log ( '\tcolumns:' , columns ) ;
297
+ }
298
+ console . log ( '1st 10 rows:' , tableData . slice ( 0 , 10 ) ) ;
295
299
}
296
300
297
301
/**
0 commit comments