@@ -52,26 +52,27 @@ export function generateScroller(basicSelect: string, isCL: boolean): string {
52
52
*/
53
53
const vscode = acquireVsCodeApi();
54
54
const basicSelect = ${ JSON . stringify ( basicSelect ) } ;
55
+ const htmlTableId = 'resultset';
56
+ const statusId = 'status';
57
+ const messageSpanId = 'messageSpan';
58
+
55
59
let myQueryId = '';
56
-
57
- let mustLoadHeaders = true;
60
+ let needToInitializeTable = true;
58
61
let totalRows = 0;
59
62
let noMoreRows = false;
60
63
let isFetching = false;
61
64
62
65
window.addEventListener("load", main);
63
66
function main() {
64
- let Observer = new IntersectionObserver(function(entries) {
67
+ new IntersectionObserver(function(entries) {
65
68
// isIntersecting is true when element and viewport are overlapping
66
69
// isIntersecting is false when element and viewport don't overlap
67
70
if(entries[0].isIntersecting === true) {
68
71
if (isFetching === false && noMoreRows === false) {
69
72
fetchNextPage();
70
73
}
71
74
}
72
- }, { threshold: [0] });
73
-
74
- Observer.observe(document.getElementById("nextButton"));
75
+ }, { threshold: [0] }).observe(document.getElementById(messageSpanId));
75
76
76
77
window.addEventListener('message', event => {
77
78
const data = event.data;
@@ -85,21 +86,21 @@ export function generateScroller(basicSelect: string, isCL: boolean): string {
85
86
isFetching = false;
86
87
noMoreRows = data.isDone;
87
88
88
- if (mustLoadHeaders && event.data.columnList) {
89
- setHeaders('resultset', event.data.columnList);
90
- mustLoadHeaders = false;
89
+ if (needToInitializeTable && event.data.columnList) {
90
+ initializeTable( event.data.columnList);
91
+ needToInitializeTable = false;
91
92
}
92
93
93
94
if (data.rows && data.rows.length > 0) {
94
95
totalRows += data.rows.length;
95
- appendRows('resultset', data.rows);
96
+ appendRows(data.rows);
96
97
}
97
98
98
- const nextButton = document.getElementById("nextButton");
99
99
if (data.rows === undefined && totalRows === 0) {
100
- nextButton. innerText = 'Query executed with no result set returned. Rows affected: ' + data.update_count;
100
+ document.getElementById(messageSpanId). innerText = 'Statement executed with no result set returned. Rows affected: ' + data.update_count;
101
101
} else {
102
- nextButton.innerText = noMoreRows ? ('Loaded ' + totalRows + '. End of data') : ('Loaded ' + totalRows + '. Fetching more...');
102
+ document.getElementById(statusId).innerText = noMoreRows ? ('Loaded ' + totalRows + '. End of data') : ('Loaded ' + totalRows + '. More available.');
103
+ document.getElementById(messageSpanId).style.visibility = "hidden";
103
104
}
104
105
break;
105
106
@@ -124,27 +125,26 @@ export function generateScroller(basicSelect: string, isCL: boolean): string {
124
125
document.getElementById("spinnerContent").style.display = 'none';
125
126
}
126
127
127
- function setHeaders(tableId, columns) {
128
- var tHeadRef = document.getElementById(tableId).getElementsByTagName('thead')[0];
129
- tHeadRef.innerHTML = '';
130
-
131
- // Insert a row at the end of table
132
- var newRow = tHeadRef.insertRow();
133
-
134
- columns.forEach(colName => {
135
- // Insert a cell at the end of the row
136
- var newCell = newRow.insertCell();
137
-
138
- // Append a text node to the cell
139
- var newText = document.createTextNode(colName);
140
- newCell.appendChild(newText);
141
- });
128
+ function initializeTable(columns) {
129
+ // Initialize the header
130
+ var header = document.getElementById(htmlTableId).getElementsByTagName('thead')[0];
131
+ header.innerHTML = '';
132
+ var headerRow = header.insertRow();
133
+ columns.forEach(colName => headerRow.insertCell().appendChild(document.createTextNode(colName)));
134
+
135
+ // Initialize the footer
136
+ var footer = document.getElementById(htmlTableId).getElementsByTagName('tfoot')[0];
137
+ footer.innerHTML = '';
138
+ var newCell = footer.insertRow().insertCell();
139
+ newCell.colSpan = columns.length;
140
+ newCell.id = statusId;
141
+ newCell.appendChild(document.createTextNode(' '));
142
142
}
143
143
144
- function appendRows(tableId, arrayOfObjects ) {
145
- var tBodyRef = document.getElementById(tableId ).getElementsByTagName('tbody')[0];
144
+ function appendRows(rows ) {
145
+ var tBodyRef = document.getElementById(htmlTableId ).getElementsByTagName('tbody')[0];
146
146
147
- for (const row of arrayOfObjects ) {
147
+ for (const row of rows ) {
148
148
// Insert a row at the end of table
149
149
var newRow = tBodyRef.insertRow()
150
150
@@ -170,8 +170,9 @@ export function generateScroller(basicSelect: string, isCL: boolean): string {
170
170
<table id="resultset">
171
171
<thead></thead>
172
172
<tbody></tbody>
173
- </table>
174
- <p id="nextButton"></p>
173
+ <tfoot></tfoot>
174
+ </table>
175
+ <p id="messageSpan"></p>
175
176
<div id="spinnerContent" class="center-screen">
176
177
<p id="loadingText">Running statement</p>
177
178
<span class="loader"></span>
0 commit comments