@@ -8,14 +8,16 @@ let documentUrl = '';
8
8
let fileName = '' ;
9
9
let saveDataFileName = '' ;
10
10
11
- // table view vars
11
+ // table view elements
12
12
let tableContainer , table , progressRing , saveFileTypeSelector ;
13
+
14
+ // table view vars
13
15
let tableSchema ;
14
16
let tableColumns = [ ] ;
15
17
let tableData = [ ] ;
16
18
let loadedRows = 0 ;
17
19
let totalRows = 0 ;
18
- let dataPage = 0 ;
20
+ let loadedDataPage = 0 ;
19
21
20
22
// table view settings
21
23
const toolbarHeight = 40 ; // table view toolbar height offset
@@ -29,7 +31,8 @@ const selectableRows = true;
29
31
30
32
const pagination = true ;
31
33
const paginationSize = 1000 ;
32
- const pageSizes = [ 100 , 1000 , 10000 , 100000 , 1000000 , 10000000 ] ;
34
+ const pageDataSize = 100000 ;
35
+ const pageSizes = [ 100 , 1000 , 10000 , 100000 ] ;
33
36
34
37
const reactiveData = false ;
35
38
const renderVerticalBuffer = 300 ; // virtual view buffer height in px for redraw on scroll
@@ -94,7 +97,6 @@ window.addEventListener('resize', function () {
94
97
window . addEventListener ( 'message' , event => {
95
98
switch ( event . data . command ) {
96
99
case 'refresh' :
97
- console . log ( 'refreshing table view ...' ) ;
98
100
documentUrl = event . data . documentUrl ;
99
101
fileName = event . data . fileName ;
100
102
vscode . setState ( { documentUrl : documentUrl } ) ;
@@ -146,6 +148,7 @@ function initializeView() {
146
148
* @see https://code.visualstudio.com/api/extension-guides/webview#passing-messages-from-an-extension-to-a-webview
147
149
*/
148
150
function reloadData ( ) {
151
+ console . log ( 'tableView.reloadData(): reloading table data ...' ) ;
149
152
clearTable ( table ) ;
150
153
progressRing . style . visibility = 'visible' ;
151
154
vscode . postMessage ( {
@@ -159,6 +162,7 @@ function reloadData() {
159
162
* @param {* } tableData Data array to display in tabulator table.
160
163
*/
161
164
function loadData ( tableData ) {
165
+ console . log ( 'tableView.loadData(): loading table data ...' ) ;
162
166
logTableData ( tableData ) ;
163
167
if ( table === undefined ) {
164
168
// create table and load initial set of data rows
@@ -221,6 +225,11 @@ function createTable(tableData) {
221
225
222
226
// update table settings after initial data rows load
223
227
table . on ( 'tableBuilt' , onTableBuilt ) ;
228
+
229
+ // log loaded table data counts for debug
230
+ table . on ( 'dataLoaded' , data => {
231
+ console . log ( 'tableView.table.dataLoaded():loadedData:' , data . length . toLocaleString ( ) ) ;
232
+ } ) ;
224
233
}
225
234
}
226
235
@@ -254,81 +263,65 @@ function onTableBuilt () {
254
263
// request more data for incremental data loading
255
264
loadedRows = table . getRows ( ) . length ;
256
265
console . log ( 'tableView.loadedRows:' , loadedRows . toLocaleString ( ) ) ;
257
- if ( loadedRows < totalRows ) {
258
- getNextDataPage ( ) ;
266
+ getNextDataPage ( ) ;
267
+ }
268
+
269
+ /**
270
+ * Requests more data rows to load and display.
271
+ */
272
+ function getNextDataPage ( ) {
273
+ const nextDataPage = loadedDataPage + 1 ;
274
+ if ( loadedRows < totalRows && ( nextDataPage * pageDataSize ) < totalRows ) {
275
+ progressRing . style . visibility = 'visible' ;
276
+ vscode . postMessage ( {
277
+ command : 'addData' ,
278
+ dataPage : nextDataPage
279
+ } ) ;
280
+ }
281
+ else {
282
+ // hide data loading progress ring
283
+ progressRing . style . visibility = 'hidden' ;
259
284
}
260
285
}
261
286
262
287
263
288
/**
264
- * Adds data rows to the table.
289
+ * Adds data rows to the table view and requests the next data page .
265
290
*
266
291
* @param {* } table Tabulator table instance.
267
292
* @param {* } dataRows Data array for the table rows to add.
268
293
* @param {* } dataPageIndex Data page index for the data rows to add.
269
294
*/
270
295
function addData ( table , dataRows , dataPageIndex ) {
271
- if ( dataPageIndex === dataPage ) {
272
- // get the next set of data rows
273
- getNextDataPage ( ) ;
296
+ if ( dataPageIndex > loadedDataPage ) {
297
+ // increment last loaded data page index
298
+ loadedDataPage ++ ;
299
+
300
+ // add new rows to table data
301
+ console . log ( 'tableView.addData(): loading data page:' , loadedDataPage ) ;
302
+ tableData . push ( ...dataRows ) ;
303
+ loadedRows += dataRows . length ;
304
+ console . log ( 'tableView.loadedRows:' , loadedRows . toLocaleString ( ) , 'totalRows:' , totalRows . toLocaleString ( ) ) ;
274
305
}
275
306
276
- console . log ( 'tableView:addData(): loading data page:' , dataPage ) ;
277
-
278
- // add new rows to table data
279
- tableData . push . apply ( tableData , dataRows ) ;
280
- loadedRows += dataRows . length ;
281
- // console.log('tableView:rowCount:', loadedRows.toLocaleString(), 'totalRows:', totalRows.toLocaleString());
282
-
283
- if ( loadedRows < totalRows ) {
284
- // request more data rows to load and display
285
- getNextDataPage ( ) ;
286
- }
287
- else {
288
- // hide data loading progress ring
289
- progressRing . style . visibility = 'hidden' ;
290
- console . log ( 'tableView:rowCount:' , loadedRows . toLocaleString ( ) , 'totalRows:' , totalRows . toLocaleString ( ) ) ;
291
- }
292
-
293
- /*
294
- if (table && dataRows) {
295
- table.addData(dataRows, true)
296
- .then(function (rows) { // rows - array of the row components for the rows updated or added
297
- // update loaded table data array and rows counter
298
- tableData.push.apply(tableData, dataRows);
299
- loadedRows += rows.length;
300
- if (loadedRows < totalRows) {
301
- // request more data rows to load and display
302
- dataPage++;
303
- progressRing.style.visibility = 'visible';
304
- vscode.postMessage({
305
- command: 'addData',
306
- dataPage: dataPage
307
- });
308
- }
309
- else {
310
- // hide data loading progress ring
311
- progressRing.style.visibility = 'hidden';
312
- console.log('tableView:rowCount:', loadedRows, 'totalRows:', totalRows);
313
- }
314
- })
315
- .catch(function (error) {
316
- // handle error updating data
317
- console.error(error);
318
- });
319
- }*/
307
+ // request more data rows to load and display
308
+ getNextDataPage ( ) ;
320
309
}
321
310
322
311
/**
323
- * Requests more data rows to load and display .
312
+ * Clears displayed table data .
324
313
*/
325
- function getNextDataPage ( ) {
326
- dataPage ++ ;
327
- progressRing . style . visibility = 'visible' ;
328
- vscode . postMessage ( {
329
- command : 'addData' ,
330
- dataPage : dataPage
331
- } ) ;
314
+ function clearTable ( table ) {
315
+ if ( table ) {
316
+ // clear displayed table view
317
+ table . clearData ( ) ;
318
+
319
+ // reset loaded table data row/page counters
320
+ loadedRows = 0 ;
321
+ totalRows = 0 ;
322
+ loadedDataPage = 0 ;
323
+ tableData . length = 0 ;
324
+ }
332
325
}
333
326
334
327
/**
@@ -366,21 +359,6 @@ function restoreTableSetting(id, type) {
366
359
return tableSetting ? JSON . parse ( tableSetting ) : false ;
367
360
}
368
361
369
- /**
370
- * Clears displayed table data.
371
- */
372
- function clearTable ( table ) {
373
- if ( table ) {
374
- // clear displayed table view
375
- table . clearData ( ) ;
376
-
377
- // reset loaded table data row/page counters
378
- loadedRows = 0 ;
379
- totalRows = 0 ;
380
- dataPage = 0 ;
381
- }
382
- }
383
-
384
362
/**
385
363
* Scrolls table data display to the first table row.
386
364
*/
@@ -466,6 +444,6 @@ function saveData() {
466
444
* @param tableData Loaded able data.
467
445
*/
468
446
function logTableData ( tableData ) {
469
- console . log ( 'tableView:rowCount: ' , tableData . length ) ;
447
+ console . log ( 'tableView.loadedRows: ' , tableData . length . toLocaleString ( ) ) ;
470
448
console . log ( '1st 10 rows:' , tableData . slice ( 0 , 10 ) ) ;
471
449
}
0 commit comments