1
0
Fork 0
mirror of synced 2024-10-05 20:44:47 +13:00

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:
mike12345567 2022-04-22 12:56:36 +01:00
parent ab6473dfb7
commit 9b20daf930
2 changed files with 28 additions and 9 deletions

View file

@ -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

View file

@ -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)
)
}
/**