35 lines
1.1 KiB
JavaScript
35 lines
1.1 KiB
JavaScript
import { tables } from "../stores/backend"
|
|
import { BannedSearchTypes } from "../constants/backend"
|
|
import { get } from "svelte/store"
|
|
|
|
export function getTableFields(linkField) {
|
|
const table = get(tables).list.find(table => table._id === linkField.tableId)
|
|
if (!table || !table.sql) {
|
|
return []
|
|
}
|
|
const linkFields = getFields(Object.values(table.schema), {
|
|
allowLinks: false,
|
|
})
|
|
return linkFields.map(field => ({
|
|
...field,
|
|
name: `${table.name}.${field.name}`,
|
|
}))
|
|
}
|
|
|
|
export function getFields(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(linkField))
|
|
}
|
|
}
|
|
const staticFormulaFields = fields.filter(
|
|
field => field.type === "formula" && field.formulaType === "static"
|
|
)
|
|
return filteredFields.concat(staticFormulaFields)
|
|
}
|