@@ -9,7 +9,7 @@ let fileName = '';
9
9
let saveDataFileName = '' ;
10
10
11
11
// table view elements
12
- let tableContainer , table , progressRing , saveFileTypeSelector ;
12
+ let tableContainer , table , progressRing , saveFileTypeSelector , tablePageSelector ;
13
13
14
14
// table view vars
15
15
let tableSchema ;
@@ -29,7 +29,7 @@ const movableColumns = true;
29
29
const movableRows = true ;
30
30
const selectableRows = true ;
31
31
32
- const pagination = true ;
32
+ const pagination = false ;
33
33
const paginationSize = 1000 ;
34
34
const pageDataSize = 100000 ;
35
35
const pageSizes = [ 100 , 1000 , 10000 , 100000 ] ;
@@ -123,10 +123,6 @@ function initializeView() {
123
123
// data progress loading indicator
124
124
progressRing = document . getElementById ( 'progress-ring' ) ;
125
125
126
- // save file selector
127
- saveFileTypeSelector = document . getElementById ( 'save-file-type-selector' ) ;
128
- saveFileTypeSelector . onchange = saveData ;
129
-
130
126
// reload data UI
131
127
const reloadButton = document . getElementById ( 'reload-button' ) ;
132
128
reloadButton . addEventListener ( 'click' , reloadData ) ;
@@ -138,6 +134,14 @@ function initializeView() {
138
134
const scrollToLastRowButton = document . getElementById ( 'scroll-to-last-row-button' ) ;
139
135
scrollToLastRowButton . addEventListener ( 'click' , scrollToLastRow ) ;
140
136
137
+ // table page selector
138
+ tablePageSelector = document . getElementById ( 'table-page-selector' ) ;
139
+ tablePageSelector . onchange = showDataPage ;
140
+
141
+ // save file selector
142
+ saveFileTypeSelector = document . getElementById ( 'save-file-type-selector' ) ;
143
+ saveFileTypeSelector . onchange = saveData ;
144
+
141
145
// request initial rows data load
142
146
vscode . postMessage ( { command : 'refresh' } ) ;
143
147
}
@@ -297,22 +301,36 @@ function addData(table, dataRows, dataPageIndex) {
297
301
// increment last loaded data page index
298
302
loadedDataPage ++ ;
299
303
304
+ // update data page selector
305
+ tablePageSelector . innerHTML += `<option value="${ loadedDataPage } ">${ loadedDataPage + 1 } </option>` ;
306
+
300
307
// add new rows to table data
301
- console . log ( 'tableView.addData(): loading data page:' , loadedDataPage ) ;
302
308
tableData . push ( ...dataRows ) ;
303
- loadedRows += dataRows . length ;
304
- console . log ( 'tableView.loadedRows:' , loadedRows . toLocaleString ( ) , 'totalRows:' , totalRows . toLocaleString ( ) ) ;
305
-
306
- if ( table . getDataCount ( ) <= 0 ) {
307
- // display the first data page on reload
308
- table . setData ( tableData ) ;
309
+ if ( loadedRows <= 0 ) {
310
+ // reset table data on on reload
311
+ table . setData ( dataRows ) ;
309
312
}
313
+ loadedRows += dataRows . length ;
314
+ // console.log('tableView.addData(): loading data page:', loadedDataPage);
315
+ // console.log('tableView.loadedRows:', loadedRows.toLocaleString(), 'totalRows:', totalRows.toLocaleString());
310
316
}
311
317
312
318
// request more data rows to load and display
313
319
getNextDataPage ( ) ;
314
320
}
315
321
322
+ /**
323
+ * Loads requested data page in table view.
324
+ */
325
+ function showDataPage ( ) {
326
+ let dataPageIndex = Number ( tablePageSelector . value ) ;
327
+ // console.log('tableView.showDataPage(): loading data page:', dataPageIndex);
328
+ const pageStart = ( dataPageIndex * pageDataSize ) ;
329
+ const pageData = tableData . slice ( pageStart , Math . min ( pageStart + pageDataSize , totalRows ) ) ;
330
+ table . clearData ( ) ;
331
+ table . setData ( pageData ) ;
332
+ }
333
+
316
334
/**
317
335
* Clears displayed table data.
318
336
*/
@@ -325,7 +343,10 @@ function clearTable(table) {
325
343
loadedRows = 0 ;
326
344
totalRows = 0 ;
327
345
loadedDataPage = 0 ;
328
- tableData . length = 0 ;
346
+ tableData = [ ] ;
347
+
348
+ // clear UI controls
349
+ tablePageSelector . innerHTML = '<option value="">Page</option><option value="1">1</option>' ;
329
350
}
330
351
}
331
352
0 commit comments