Skip to content

Commit 335a0ce

Browse files
authored
Merge pull request #2403 from finos/fix-in-notin-filter-python
Fix `in` and `not in` filter UI bug
2 parents 3bba225 + 5b9392a commit 335a0ce

File tree

3 files changed

+65
-1
lines changed

3 files changed

+65
-1
lines changed

rust/perspective-viewer/src/rust/components/column_selector/config_selector.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,13 @@ impl Component for ConfigSelector {
306306
let mut tokens = current.split(',').collect::<Vec<_>>();
307307
tokens.pop();
308308
tokens.push(&input);
309-
filter[index].2 = FilterTerm::Scalar(Scalar::String(tokens.join(",")));
309+
filter[index].2 = FilterTerm::Array(
310+
tokens
311+
.iter()
312+
.map(|x| Scalar::String(x.trim().to_owned()))
313+
.collect(),
314+
);
315+
310316
let filter = Some(filter);
311317
ViewConfigUpdate {
312318
filter,

rust/perspective-viewer/test/js/regressions.spec.js

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,64 @@ test.describe("Regression tests", () => {
6161
]);
6262
});
6363

64+
test("in filter generates correct array-encoded config", async ({
65+
page,
66+
}) => {
67+
await page.evaluate(async () => {
68+
const viewer = document.querySelector("perspective-viewer");
69+
await viewer.restore({
70+
group_by: ["State"],
71+
columns: ["Sales"],
72+
settings: true,
73+
filter: [["State", "in", []]],
74+
});
75+
76+
const filter = viewer.shadowRoot.querySelector(
77+
".pivot-column input[type=text]"
78+
);
79+
filter.value = "C";
80+
const event = new Event("input", {
81+
bubbles: true,
82+
cancelable: true,
83+
});
84+
85+
filter.dispatchEvent(event);
86+
});
87+
88+
const elem = await page.waitForSelector("perspective-dropdown");
89+
await page.evaluate((elem) => {
90+
let node = elem.shadowRoot.querySelector("span:first-of-type");
91+
var clickEvent = document.createEvent("MouseEvents");
92+
clickEvent.initEvent("mousedown", true, true);
93+
node.dispatchEvent(clickEvent);
94+
}, elem);
95+
96+
const config = await page.evaluate(async () => {
97+
const viewer = document.querySelector("perspective-viewer");
98+
return await viewer.save();
99+
});
100+
101+
expect(config).toEqual({
102+
aggregates: {},
103+
columns: ["Sales"],
104+
expressions: [],
105+
filter: [["State", "in", ["California"]]],
106+
group_by: ["State"],
107+
plugin: "Debug",
108+
plugin_config: {},
109+
settings: true,
110+
sort: [],
111+
split_by: [],
112+
theme: "Pro Light",
113+
title: null,
114+
});
115+
116+
const contents = await get_contents(page);
117+
await compareContentsToSnapshot(contents, [
118+
"regressions-in-filter-generates-correct-config.txt",
119+
]);
120+
});
121+
64122
test("Numeric filter input does not trigger render on trailing zeroes", async ({
65123
page,
66124
}) => {
176 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)