Fix for #5495 - making sure that formula columns have access to the relationship details before squashing the results ready for response from the API. Also making sure that the frontend inputs the relationship bindings as expected with the proper path for access.
This commit is contained in:
parent
732a547c2c
commit
89683f9de4
|
@ -60,6 +60,7 @@ export function getBindings({
|
|||
)
|
||||
|
||||
const label = path == null ? column : `${path}.0.${column}`
|
||||
const binding = path == null ? `[${column}]` : `${path}.0.[${column}]`
|
||||
// only supply a description for relationship paths
|
||||
const description =
|
||||
path == null
|
||||
|
@ -73,8 +74,8 @@ export function getBindings({
|
|||
description,
|
||||
// don't include path, it messes things up, relationship path
|
||||
// will be replaced by the main array binding
|
||||
readableBinding: column,
|
||||
runtimeBinding: `[${column}]`,
|
||||
readableBinding: label,
|
||||
runtimeBinding: binding,
|
||||
})
|
||||
}
|
||||
return bindings
|
||||
|
|
|
@ -323,6 +323,28 @@ module External {
|
|||
return { row: newRow, manyRelationships }
|
||||
}
|
||||
|
||||
squashRelationshipColumns(
|
||||
table: Table,
|
||||
row: Row,
|
||||
relationships: RelationshipsJson[]
|
||||
): Row {
|
||||
for (let relationship of relationships) {
|
||||
const linkedTable = this.tables[relationship.tableName]
|
||||
if (!linkedTable) {
|
||||
continue
|
||||
}
|
||||
const display = linkedTable.primaryDisplay
|
||||
for (let key of Object.keys(row[relationship.column])) {
|
||||
const related: Row = row[relationship.column][key]
|
||||
row[relationship.column][key] = {
|
||||
primaryDisplay: display ? related[display] : undefined,
|
||||
_id: related._id,
|
||||
}
|
||||
}
|
||||
}
|
||||
return row
|
||||
}
|
||||
|
||||
/**
|
||||
* This iterates through the returned rows and works out what elements of the rows
|
||||
* actually match up to another row (based on primary keys) - this is pretty specific
|
||||
|
@ -354,12 +376,6 @@ module External {
|
|||
if (!linked._id) {
|
||||
continue
|
||||
}
|
||||
// if not returning full docs then get the minimal links out
|
||||
const display = linkedTable.primaryDisplay
|
||||
linked = {
|
||||
primaryDisplay: display ? linked[display] : undefined,
|
||||
_id: linked._id,
|
||||
}
|
||||
columns[relationship.column] = linked
|
||||
}
|
||||
for (let [column, related] of Object.entries(columns)) {
|
||||
|
@ -417,7 +433,9 @@ module External {
|
|||
relationships
|
||||
)
|
||||
}
|
||||
return processFormulas(table, Object.values(finalRows))
|
||||
return processFormulas(table, Object.values(finalRows)).map((row: Row) =>
|
||||
this.squashRelationshipColumns(table, row, relationships)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue