diff --git a/packages/server/src/api/routes/tests/row.spec.js b/packages/server/src/api/routes/tests/row.spec.js index 5cbb3d04b4..4b835a1fb5 100644 --- a/packages/server/src/api/routes/tests/row.spec.js +++ b/packages/server/src/api/routes/tests/row.spec.js @@ -212,6 +212,7 @@ describe("/rows", () => { attachmentNull: attachment, attachmentUndefined: attachment, attachmentEmpty: attachment, + attachmentEmptyArrayStr: attachment }, }) @@ -239,6 +240,7 @@ describe("/rows", () => { attachmentNull: null, attachmentUndefined: undefined, attachmentEmpty: "", + attachmentEmptyArrayStr: "[]", } const id = (await config.createRow(row))._id @@ -268,6 +270,7 @@ describe("/rows", () => { expect(saved.attachmentNull).toEqual([]) expect(saved.attachmentUndefined).toBe(undefined) expect(saved.attachmentEmpty).toEqual([]) + expect(saved.attachmentEmptyArrayStr).toEqual([]) }) }) diff --git a/packages/server/src/utilities/rowProcessor/map.ts b/packages/server/src/utilities/rowProcessor/map.ts index 8911d62133..808b16178d 100644 --- a/packages/server/src/utilities/rowProcessor/map.ts +++ b/packages/server/src/utilities/rowProcessor/map.ts @@ -1,5 +1,6 @@ // @ts-nocheck import { FieldTypes } from "../../constants" +import { logging } from "@budibase/backend-core" /** * A map of how we convert various properties in rows to each other based on the row type. @@ -67,9 +68,23 @@ export const TYPE_TRANSFORM_MAP: any = { }, }, [FieldTypes.ATTACHMENT]: { - "": [], [null]: [], [undefined]: undefined, + parse: attachments => { + if (typeof attachments === "string") { + if (attachments === "") { + return [] + } + let result + try { + result = JSON.parse(attachments) + } catch (e) { + logging.logAlert("Could not parse attachments", e) + } + return result + } + return attachments + }, }, [FieldTypes.BOOLEAN]: { "": null,