Updating how search filters are converted, needs full column metadata to work it out this way.
This commit is contained in:
parent
8331d03ea2
commit
13ac273c83
|
@ -105,11 +105,17 @@ function cleanupFilters(
|
||||||
// update the keys of filters to manage user columns
|
// update the keys of filters to manage user columns
|
||||||
const keyInAnyTable = (key: string): boolean =>
|
const keyInAnyTable = (key: string): boolean =>
|
||||||
allTables.some(table => table.schema[key])
|
allTables.some(table => table.schema[key])
|
||||||
|
|
||||||
|
const splitter = new dataFilters.ColumnSplitter(allTables)
|
||||||
for (const filter of Object.values(filters)) {
|
for (const filter of Object.values(filters)) {
|
||||||
for (const key of Object.keys(filter)) {
|
for (const key of Object.keys(filter)) {
|
||||||
const { prefix, key: rawKey } = dataFilters.getKeyNumbering(key)
|
const { numberPrefix, relationshipPrefix, column } = splitter.run(key)
|
||||||
if (keyInAnyTable(rawKey)) {
|
if (keyInAnyTable(column)) {
|
||||||
filter[`${prefix || ""}${mapToUserColumn(rawKey)}`] = filter[key]
|
filter[
|
||||||
|
`${numberPrefix || ""}${relationshipPrefix || ""}${mapToUserColumn(
|
||||||
|
column
|
||||||
|
)}`
|
||||||
|
] = filter[key]
|
||||||
delete filter[key]
|
delete filter[key]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ import {
|
||||||
RowSearchParams,
|
RowSearchParams,
|
||||||
EmptyFilterOption,
|
EmptyFilterOption,
|
||||||
SearchResponse,
|
SearchResponse,
|
||||||
|
Table,
|
||||||
} from "@budibase/types"
|
} from "@budibase/types"
|
||||||
import dayjs from "dayjs"
|
import dayjs from "dayjs"
|
||||||
import { OperatorOptions, SqlNumberTypeRangeMap } from "./constants"
|
import { OperatorOptions, SqlNumberTypeRangeMap } from "./constants"
|
||||||
|
@ -150,6 +151,54 @@ export const getKeyNumbering = (
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates a splitter which can be used to split columns from a context into
|
||||||
|
* their components (number prefix, relationship column/table, column name)
|
||||||
|
*/
|
||||||
|
export class ColumnSplitter {
|
||||||
|
tableNames: string[]
|
||||||
|
tableIds: string[]
|
||||||
|
relationshipColumnNames: string[]
|
||||||
|
relationships: string[]
|
||||||
|
|
||||||
|
constructor(tables: Table[]) {
|
||||||
|
this.tableNames = tables.map(table => table.name)
|
||||||
|
this.tableIds = tables.map(table => table._id!)
|
||||||
|
this.relationshipColumnNames = tables.flatMap(table =>
|
||||||
|
Object.keys(table.schema).filter(
|
||||||
|
columnName => table.schema[columnName].type === FieldType.LINK
|
||||||
|
)
|
||||||
|
)
|
||||||
|
this.relationships = this.tableNames
|
||||||
|
.concat(this.tableIds)
|
||||||
|
.concat(this.relationshipColumnNames)
|
||||||
|
}
|
||||||
|
|
||||||
|
run(key: string): {
|
||||||
|
numberPrefix?: string
|
||||||
|
relationshipPrefix?: string
|
||||||
|
column: string
|
||||||
|
} {
|
||||||
|
let { prefix, key: splitKey } = getKeyNumbering(key)
|
||||||
|
let relationship: string | undefined
|
||||||
|
for (let possibleRelationship of this.relationships) {
|
||||||
|
const withDot = `${possibleRelationship}.`
|
||||||
|
if (splitKey.startsWith(withDot)) {
|
||||||
|
const finalKeyParts = splitKey.split(withDot)
|
||||||
|
finalKeyParts.shift()
|
||||||
|
relationship = withDot
|
||||||
|
splitKey = finalKeyParts.join(".")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
numberPrefix: prefix,
|
||||||
|
relationshipPrefix: relationship,
|
||||||
|
column: splitKey,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds a JSON query from the filter structure generated in the builder
|
* Builds a JSON query from the filter structure generated in the builder
|
||||||
* @param filter the builder filter structure
|
* @param filter the builder filter structure
|
||||||
|
|
12
yarn.lock
12
yarn.lock
|
@ -16917,7 +16917,7 @@ open@^8.0.0, open@^8.4.0, open@~8.4.0:
|
||||||
is-docker "^2.1.1"
|
is-docker "^2.1.1"
|
||||||
is-wsl "^2.2.0"
|
is-wsl "^2.2.0"
|
||||||
|
|
||||||
openai@4.52.1:
|
openai@^4.52.1:
|
||||||
version "4.52.1"
|
version "4.52.1"
|
||||||
resolved "https://registry.yarnpkg.com/openai/-/openai-4.52.1.tgz#44acc362a844fa2927b0cfa1fb70fb51e388af65"
|
resolved "https://registry.yarnpkg.com/openai/-/openai-4.52.1.tgz#44acc362a844fa2927b0cfa1fb70fb51e388af65"
|
||||||
integrity sha512-kv2hevAWZZ3I/vd2t8znGO2rd8wkowncsfcYpo8i+wU9ML+JEcdqiViANXXjWWGjIhajFNixE6gOY1fEgqILAg==
|
integrity sha512-kv2hevAWZZ3I/vd2t8znGO2rd8wkowncsfcYpo8i+wU9ML+JEcdqiViANXXjWWGjIhajFNixE6gOY1fEgqILAg==
|
||||||
|
@ -21786,16 +21786,16 @@ typescript-eslint@^7.3.1:
|
||||||
"@typescript-eslint/eslint-plugin" "7.3.1"
|
"@typescript-eslint/eslint-plugin" "7.3.1"
|
||||||
"@typescript-eslint/parser" "7.3.1"
|
"@typescript-eslint/parser" "7.3.1"
|
||||||
|
|
||||||
|
typescript@5.2.2, "typescript@>=3 < 6":
|
||||||
|
version "5.2.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78"
|
||||||
|
integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==
|
||||||
|
|
||||||
typescript@5.5.2:
|
typescript@5.5.2:
|
||||||
version "5.5.2"
|
version "5.5.2"
|
||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.2.tgz#c26f023cb0054e657ce04f72583ea2d85f8d0507"
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.2.tgz#c26f023cb0054e657ce04f72583ea2d85f8d0507"
|
||||||
integrity sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==
|
integrity sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==
|
||||||
|
|
||||||
"typescript@>=3 < 6":
|
|
||||||
version "5.2.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78"
|
|
||||||
integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==
|
|
||||||
|
|
||||||
typescript@^3.9.10, typescript@^3.9.5, typescript@^3.9.7:
|
typescript@^3.9.10, typescript@^3.9.5, typescript@^3.9.7:
|
||||||
version "3.9.10"
|
version "3.9.10"
|
||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8"
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8"
|
||||||
|
|
Loading…
Reference in New Issue