Handle link fields

This commit is contained in:
adrinr 2023-02-22 14:59:42 +01:00
parent e350f6b166
commit 63af59a5b0
1 changed files with 15 additions and 3 deletions

View File

@ -177,9 +177,14 @@ function getEndpoint(tableId: string | undefined, operation: string) {
function basicProcessing(row: Row, table: Table): Row { function basicProcessing(row: Row, table: Table): Row {
const thisRow: Row = {} const thisRow: Row = {}
// filter the row down to what is actually the row (not joined) // filter the row down to what is actually the row (not joined)
for (let fieldName of Object.keys(table.schema)) { for (let field of Object.values(table.schema)) {
const fieldName = field.name
const pathValue = row[`${table.name}.${fieldName}`] const pathValue = row[`${table.name}.${fieldName}`]
const value = pathValue != null ? pathValue : row[fieldName] const value =
pathValue != null || field.type === FieldTypes.LINK
? pathValue
: row[fieldName]
// all responses include "select col as table.col" so that overlaps are handled // all responses include "select col as table.col" so that overlaps are handled
if (value != null) { if (value != null) {
thisRow[fieldName] = value thisRow[fieldName] = value
@ -572,11 +577,18 @@ export class ExternalRequest {
if (!linkTable || !linkPrimary) { if (!linkTable || !linkPrimary) {
return return
} }
const linkSecondary =
linkTable?.primary &&
linkTable?.primary?.length > 1 &&
linkTable?.primary[1]
const rows = related[key]?.rows || [] const rows = related[key]?.rows || []
const found = rows.find( const found = rows.find(
(row: { [key: string]: any }) => (row: { [key: string]: any }) =>
row[linkPrimary] === relationship.id || row[linkPrimary] === relationship.id ||
row[linkPrimary] === body?.[linkPrimary] (row[linkPrimary] === body?.[linkPrimary] &&
(!linkSecondary || row[linkSecondary] === body?.[linkSecondary]))
) )
const operation = isUpdate ? Operation.UPDATE : Operation.CREATE const operation = isUpdate ? Operation.UPDATE : Operation.CREATE
if (!found) { if (!found) {