budibase/packages/frontend-core/src/utils/searchFields.js

37 lines
1.0 KiB
JavaScript

import { BannedSearchTypes } from "../constants"
export function getTableFields(tables, linkField) {
const table = tables.find(table => table._id === linkField.tableId)
if (!table || !table.sql) {
return []
}
const linkFields = getFields(tables, Object.values(table.schema), {
allowLinks: false,
})
return linkFields.map(field => ({
...field,
name: `${linkField.name}.${field.name}`,
}))
}
export function getFields(
tables,
fields,
{ allowLinks } = { allowLinks: true }
) {
let filteredFields = fields.filter(
field => !BannedSearchTypes.includes(field.type)
)
if (allowLinks) {
const linkFields = fields.filter(field => field.type === "link")
for (let linkField of linkFields) {
// only allow one depth of SQL relationship filtering
filteredFields = filteredFields.concat(getTableFields(tables, linkField))
}
}
const staticFormulaFields = fields.filter(
field => field.type === "formula" && field.formulaType === "static"
)
return filteredFields.concat(staticFormulaFields)
}