diff --git a/packages/perspective-viewer-datagrid/src/js/data_listener/format_cell.js b/packages/perspective-viewer-datagrid/src/js/data_listener/format_cell.js index 8b5a9dda98..fb339176b7 100644 --- a/packages/perspective-viewer-datagrid/src/js/data_listener/format_cell.js +++ b/packages/perspective-viewer-datagrid/src/js/data_listener/format_cell.js @@ -24,7 +24,7 @@ const FORMAT_CACHE = new FormatterCache(); * @returns */ export function format_cell( - parts, + title, val, plugins = {}, use_table_schema = false @@ -33,8 +33,6 @@ export function format_cell( return "-"; } - // TODO don't do this on every cell render ... - const title = parts[this._config.split_by.length]; const type = (use_table_schema && this._table_schema[title]) || this._schema[title] || diff --git a/packages/perspective-viewer-datagrid/src/js/data_listener/format_tree_header.js b/packages/perspective-viewer-datagrid/src/js/data_listener/format_tree_header.js index 3e487f9f0d..b7f62024b7 100644 --- a/packages/perspective-viewer-datagrid/src/js/data_listener/format_tree_header.js +++ b/packages/perspective-viewer-datagrid/src/js/data_listener/format_tree_header.js @@ -28,7 +28,7 @@ export function* format_tree_header(paths = [], row_headers, regularTable) { path = path.slice(0, path.length - 1).fill(""); const formatted = format_cell.call( this, - [row_headers[path.length - 1]], + row_headers[path.length - 1], last, plugins, true diff --git a/packages/perspective-viewer-datagrid/src/js/data_listener/index.js b/packages/perspective-viewer-datagrid/src/js/data_listener/index.js index 60fdf78ee7..cebe3471ea 100644 --- a/packages/perspective-viewer-datagrid/src/js/data_listener/index.js +++ b/packages/perspective-viewer-datagrid/src/js/data_listener/index.js @@ -87,7 +87,7 @@ export function createDataListener() { column.map((x) => format_cell.call( this, - path_parts, + path_parts[this._config.split_by.length], x, regularTable[PRIVATE_PLUGIN_SYMBOL] ) diff --git a/packages/perspective-viewer-datagrid/test/js/superstore.spec.js b/packages/perspective-viewer-datagrid/test/js/superstore.spec.js index a555302b60..32fc90a7e9 100644 --- a/packages/perspective-viewer-datagrid/test/js/superstore.spec.js +++ b/packages/perspective-viewer-datagrid/test/js/superstore.spec.js @@ -11,7 +11,11 @@ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ import { test } from "@playwright/test"; -import { run_standard_tests } from "@finos/perspective-test"; +import { + compareContentsToSnapshot, + compareLightDOMContents, + run_standard_tests, +} from "@finos/perspective-test"; async function getDatagridContents(page) { return await page.evaluate(async () => { @@ -39,4 +43,20 @@ test.describe("Datagrid with superstore data set", () => { }); run_standard_tests("perspective-viewer-datagrid", getDatagridContents); + + test("Row headers are printed correctly", async ({ page }) => { + await page.evaluate(async () => { + await document.querySelector("perspective-viewer").restore({ + plugin: "Datagrid", + group_by: ["Ship Date"], + split_by: ["Ship Mode"], + columns: ["Sales", "Quantity", "Discount", "Profit"], + }); + }); + + compareContentsToSnapshot( + await getDatagridContents(page), + "row-headers-are-printed-correctly" + ); + }); }); diff --git a/rust/perspective-viewer/src/rust/components/column_selector/filter_column.rs b/rust/perspective-viewer/src/rust/components/column_selector/filter_column.rs index 4727ab92ad..1bc87ea904 100644 --- a/rust/perspective-viewer/src/rust/components/column_selector/filter_column.rs +++ b/rust/perspective-viewer/src/rust/components/column_selector/filter_column.rs @@ -53,9 +53,8 @@ pub struct FilterColumnProps { } impl PartialEq for FilterColumnProps { - fn eq(&self, _rhs: &Self) -> bool { - false - // self.idx == other.idx && self.filter == other.filter + fn eq(&self, rhs: &Self) -> bool { + self.idx == rhs.idx && self.filter == rhs.filter && self.on_keydown == rhs.on_keydown } } @@ -219,13 +218,15 @@ impl FilterColumnProps { }; if let Some(input) = filter_input { - filter_column.2 = input; - let update = ViewConfigUpdate { - filter: Some(filter), - ..ViewConfigUpdate::default() - }; + if input != filter_column.2 { + filter_column.2 = input; + let update = ViewConfigUpdate { + filter: Some(filter), + ..ViewConfigUpdate::default() + }; - ApiFuture::spawn(self.update_and_render(update)); + ApiFuture::spawn(self.update_and_render(update)); + } } } } diff --git a/rust/perspective-viewer/test/js/regressions.spec.js b/rust/perspective-viewer/test/js/regressions.spec.js index 10e4caf619..1fd60837df 100644 --- a/rust/perspective-viewer/test/js/regressions.spec.js +++ b/rust/perspective-viewer/test/js/regressions.spec.js @@ -10,8 +10,11 @@ // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ -import { test } from "@playwright/test"; -import { compareContentsToSnapshot } from "@finos/perspective-test"; +import { test, expect } from "@playwright/test"; +import { + compareContentsToSnapshot, + shadow_type, +} from "@finos/perspective-test"; async function get_contents(page) { return await page.evaluate(async () => { @@ -57,4 +60,37 @@ test.describe("Regression tests", () => { "regressions-not_in-filter-works-correctly.txt", ]); }); + + test("Numeric filter input does not trigger render on trailing zeroes", async ({ + page, + }) => { + await page.evaluate(async () => { + const viewer = document.querySelector("perspective-viewer"); + await viewer.restore({ + filter: [["Sales", ">", 1.1]], + settings: true, + }); + }); + + // await new Promise((x) => setTimeout(x, 10000)); + + await shadow_type( + page, + "0001", + true, + "perspective-viewer", + "input.num-filter" + ); + + const value = await page.evaluate(async () => { + const viewer = document.querySelector("perspective-viewer"); + return viewer.shadowRoot.querySelector("input.num-filter").value; + }); + + expect(value).toEqual("1.10001"); + const contents = await get_contents(page); + await compareContentsToSnapshot(contents, [ + "numeric-filter-input-does-not-trigger-render-on-trailing-zeroes.txt", + ]); + }); }); diff --git a/tools/perspective-test/results.tar.gz b/tools/perspective-test/results.tar.gz index 5fd3f99f4f..05b906841b 100644 Binary files a/tools/perspective-test/results.tar.gz and b/tools/perspective-test/results.tar.gz differ