Merge pull request #2539 from Budibase/fix/table-primary-same-name
Fixing issue with relationships that was uncovered by having same primary display and table name
This commit is contained in:
commit
aafd49ce82
|
@ -112,16 +112,24 @@ export const enrichRows = async (rows, tableId) => {
|
|||
if (!Array.isArray(rows)) {
|
||||
return []
|
||||
}
|
||||
if (rows.length && tableId) {
|
||||
if (rows.length) {
|
||||
// map of tables, incase a row being loaded is not from the same table
|
||||
const tables = {}
|
||||
for (let row of rows) {
|
||||
// fallback to passed in tableId if row doesn't have it specified
|
||||
let rowTableId = row.tableId || tableId
|
||||
let table = tables[rowTableId]
|
||||
if (!table) {
|
||||
// Fetch table schema so we can check column types
|
||||
const tableDefinition = await fetchTableDefinition(tableId)
|
||||
const schema = tableDefinition && tableDefinition.schema
|
||||
table = await fetchTableDefinition(rowTableId)
|
||||
tables[rowTableId] = table
|
||||
}
|
||||
const schema = table?.schema
|
||||
if (schema) {
|
||||
const keys = Object.keys(schema)
|
||||
rows.forEach(row => {
|
||||
for (let key of keys) {
|
||||
const type = schema[key].type
|
||||
if (type === "link") {
|
||||
if (type === "link" && Array.isArray(row[key])) {
|
||||
// Enrich row a string join of relationship fields
|
||||
row[`${key}_text`] =
|
||||
row[key]
|
||||
|
@ -137,7 +145,7 @@ export const enrichRows = async (rows, tableId) => {
|
|||
row[`${key}_first`] = url
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
return rows
|
||||
|
|
|
@ -203,19 +203,17 @@ exports.attachFullLinkedDocs = async (ctx, table, rows) => {
|
|||
exports.squashLinksToPrimaryDisplay = async (appId, table, enriched) => {
|
||||
const db = new CouchDB(appId)
|
||||
// will populate this as we find them
|
||||
const linkedTables = []
|
||||
for (let [column, schema] of Object.entries(table.schema)) {
|
||||
if (schema.type !== FieldTypes.LINK) {
|
||||
continue
|
||||
}
|
||||
const linkedTables = [table]
|
||||
for (let row of enriched) {
|
||||
if (!row[column] || !row[column].length) {
|
||||
// this only fetches the table if its not already in array
|
||||
const rowTable = await getLinkedTable(db, row.tableId, linkedTables)
|
||||
for (let [column, schema] of Object.entries(rowTable.schema)) {
|
||||
if (schema.type !== FieldTypes.LINK || !Array.isArray(row[column])) {
|
||||
continue
|
||||
}
|
||||
const newLinks = []
|
||||
for (let link of row[column]) {
|
||||
const linkTblId = link.tableId || getRelatedTableForField(table, column)
|
||||
// this only fetches the table if its not already in array
|
||||
const linkedTable = await getLinkedTable(db, linkTblId, linkedTables)
|
||||
const obj = { _id: link._id }
|
||||
if (link[linkedTable.primaryDisplay]) {
|
||||
|
|
Loading…
Reference in New Issue