Skip to content

Commit 046a0ac

Browse files
authored
Merge pull request #3098 from perspective-dev/fix-viewport-sorting
Fix viewport scroll regression in datagrid
2 parents 5500939 + 2af1bca commit 046a0ac

File tree

3 files changed

+52
-7
lines changed

3 files changed

+52
-7
lines changed

packages/viewer-datagrid/src/js/data_listener/index.js

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,19 @@ export function createDataListener(viewer) {
6363
(x) => x !== "__ROW_PATH__" && x !== "__ID__",
6464
);
6565

66-
const old_length = this._column_paths.length;
67-
this._column_paths.splice(
68-
new_window.start_col,
69-
new_col_paths.length,
70-
...new_col_paths,
71-
);
66+
let changed_cols = false;
67+
for (let i = 0; i < new_col_paths.length; i++) {
68+
if (
69+
this._column_paths[new_window.start_col + i] !==
70+
new_col_paths[i]
71+
) {
72+
changed_cols = true;
73+
this._column_paths[new_window.start_col + i] =
74+
new_col_paths[i];
75+
}
76+
}
7277

73-
if (this._column_paths.length !== old_length || old_length === 0) {
78+
if (changed_cols) {
7479
const [a, b] = await Promise.all([
7580
this._view.schema(),
7681
this._view.expression_schema(),

packages/viewer-datagrid/test/js/superstore.spec.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,46 @@ test.describe("Datagrid with superstore data set", () => {
207207
});
208208
});
209209

210+
test.describe("Datagrid regressions", () => {
211+
// https://github.com/perspective-dev/perspective/issues/3097
212+
test("Sorting a column does not break viewport metadata", async ({
213+
page,
214+
}) => {
215+
await page.goto("/tools/test/src/html/basic-test.html");
216+
await page.evaluate(async () => {
217+
while (!window["__TEST_PERSPECTIVE_READY__"]) {
218+
await new Promise((x) => setTimeout(x, 10));
219+
}
220+
});
221+
222+
const td = await page.evaluateHandle(async () => {
223+
const elem = await document
224+
.querySelector("perspective-viewer-datagrid")
225+
.shadowRoot.querySelector("regular-table");
226+
elem.scrollLeft = 5000;
227+
await elem.draw();
228+
return document
229+
.querySelector("perspective-viewer-datagrid")
230+
.shadowRoot.querySelector("table thead tr th:nth-child(3)");
231+
});
232+
233+
await td.click();
234+
await page.evaluate(async () => {
235+
await document.querySelector("perspective-viewer").flush();
236+
const elem = await document
237+
.querySelector("perspective-viewer-datagrid")
238+
.shadowRoot.querySelector("regular-table");
239+
elem.scrollLeft = 0;
240+
await elem.draw();
241+
});
242+
243+
compareContentsToSnapshot(
244+
await getDatagridContents(page),
245+
"sorting-a-column-does-not-break-viewport-emtadata.txt",
246+
);
247+
});
248+
});
249+
210250
test.describe("Datagrid with superstore arrow data set", () => {
211251
test.beforeEach(async ({ page }) => {
212252
await page.goto(

tools/test/results.tar.gz

9.32 KB
Binary file not shown.

0 commit comments

Comments
 (0)