1
0
Fork 0
mirror of synced 2024-07-07 07:15:43 +12:00

Merge pull request #13633 from Budibase/fix-empty-search

Fix behaviour of 'when filter empty' for empty and notEmpty filter types.
This commit is contained in:
Sam Rose 2024-05-08 10:12:51 +01:00 committed by GitHub
commit 93661f6082
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 45 additions and 2 deletions

View file

@ -431,10 +431,28 @@ export class QueryBuilder<T> {
})
}
if (this.#query.empty) {
build(this.#query.empty, (key: string) => `(*:* -${key}:["" TO *])`)
build(this.#query.empty, (key: string) => {
// Because the structure of an empty filter looks like this:
// { empty: { someKey: null } }
//
// The check inside of `build` does not set `allFiltersEmpty`, which results
// in weird behaviour when the empty filter is the only filter. We get around
// this by setting `allFiltersEmpty` to false here.
allFiltersEmpty = false
return `(*:* -${key}:["" TO *])`
})
}
if (this.#query.notEmpty) {
build(this.#query.notEmpty, (key: string) => `${key}:["" TO *]`)
build(this.#query.notEmpty, (key: string) => {
// Because the structure of a notEmpty filter looks like this:
// { notEmpty: { someKey: null } }
//
// The check inside of `build` does not set `allFiltersEmpty`, which results
// in weird behaviour when the empty filter is the only filter. We get around
// this by setting `allFiltersEmpty` to false here.
allFiltersEmpty = false
return `${key}:["" TO *]`
})
}
if (this.#query.oneOf) {
build(this.#query.oneOf, oneOf)

View file

@ -252,6 +252,31 @@ describe.each([
}).toFindNothing())
})
describe("empty", () => {
it("finds no empty rows", () =>
expectQuery({ empty: { name: null } }).toFindNothing())
it("should not be affected by when filter empty behaviour", () =>
expectQuery({
empty: { name: null },
onEmptyFilter: EmptyFilterOption.RETURN_ALL,
}).toFindNothing())
})
describe("notEmpty", () => {
it("finds all non-empty rows", () =>
expectQuery({ notEmpty: { name: null } }).toContainExactly([
{ name: "foo" },
{ name: "bar" },
]))
it("should not be affected by when filter empty behaviour", () =>
expectQuery({
notEmpty: { name: null },
onEmptyFilter: EmptyFilterOption.RETURN_NONE,
}).toContainExactly([{ name: "foo" }, { name: "bar" }]))
})
describe("sort", () => {
it("sorts ascending", () =>
expectSearch({