From 91878ed2ce9198ebe4c995c0d9c2f6c9608c1e20 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Thu, 25 Feb 2021 09:41:04 +0000 Subject: [PATCH] Having the server send out _id and primaryDisplay in an object for relationships, also accepting objects and coercing them on way in. --- packages/server/src/api/routes/tests/row.spec.js | 5 +++-- packages/server/src/db/linkedRows/index.js | 9 +++++---- packages/server/src/utilities/rowProcessor.js | 3 +++ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/server/src/api/routes/tests/row.spec.js b/packages/server/src/api/routes/tests/row.spec.js index 1c11369ae5..777a99b091 100644 --- a/packages/server/src/api/routes/tests/row.spec.js +++ b/packages/server/src/api/routes/tests/row.spec.js @@ -282,12 +282,13 @@ describe("/rows", () => { const secondRow = (await createRow({ name: "Test 2", description: "og desc", - link: [firstRow._id], + link: [{_id: firstRow._id}], tableId: table._id, })).body const enriched = await outputProcessing(appId, table, [secondRow]) expect(enriched[0].link.length).toBe(1) - expect(enriched[0].link[0]).toBe("Test Contact") + expect(enriched[0].link[0]._id).toBe(firstRow._id) + expect(enriched[0].link[0].primaryDisplay).toBe("Test Contact") }) }) diff --git a/packages/server/src/db/linkedRows/index.js b/packages/server/src/db/linkedRows/index.js index f60c4c7f26..052386ba86 100644 --- a/packages/server/src/db/linkedRows/index.js +++ b/packages/server/src/db/linkedRows/index.js @@ -175,11 +175,12 @@ exports.attachLinkedPrimaryDisplay = async (appId, table, rows) => { if (!linkedRow || !linkedTable) { continue } - // need to handle an edge case where relationship just wasn't found - const value = linkedRow[linkedTable.primaryDisplay] || linkedRow._id - if (value) { - row[link.fieldName].push(value) + const obj = { _id: linkedRow._id } + // if we know the display column, add it + if (linkedRow[linkedTable.primaryDisplay] != null) { + obj.primaryDisplay = linkedRow[linkedTable.primaryDisplay] } + row[link.fieldName].push(obj) } } return rows diff --git a/packages/server/src/utilities/rowProcessor.js b/packages/server/src/utilities/rowProcessor.js index 32c488aed7..eea34efc30 100644 --- a/packages/server/src/utilities/rowProcessor.js +++ b/packages/server/src/utilities/rowProcessor.js @@ -15,6 +15,9 @@ const TYPE_TRANSFORM_MAP = { [null]: [], [undefined]: undefined, parse: link => { + if (Array.isArray(link) && typeof link[0] === "object") { + return link.map(el => (el && el._id ? el._id : el)) + } if (typeof link === "string") { return [link] }