From df97b7ad9312bc60d9b33ad0683de7aa1d8747fd Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Tue, 10 Oct 2023 10:47:43 +0200 Subject: [PATCH] Expect BB ref data as csv strings --- .../server/src/api/controllers/view/exporters.ts | 4 ++++ packages/server/src/utilities/schema.ts | 13 ++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/server/src/api/controllers/view/exporters.ts b/packages/server/src/api/controllers/view/exporters.ts index e707cad0cc..b04d139e74 100644 --- a/packages/server/src/api/controllers/view/exporters.ts +++ b/packages/server/src/api/controllers/view/exporters.ts @@ -43,3 +43,7 @@ export enum Format { export function isFormat(format: any): format is Format { return Object.values(Format).includes(format as Format) } + +export function parseCsvExport(value: string) { + return JSON.parse(value?.replace(/'/g, '"')) +} diff --git a/packages/server/src/utilities/schema.ts b/packages/server/src/utilities/schema.ts index e66bc97c8f..52adc79298 100644 --- a/packages/server/src/utilities/schema.ts +++ b/packages/server/src/utilities/schema.ts @@ -2,6 +2,7 @@ import { FieldSubtype } from "@budibase/types" import { FieldTypes } from "../constants" import { ValidColumnNameRegex, utils } from "@budibase/shared-core" import { db } from "@budibase/backend-core" +import { parseCsvExport } from "../api/controllers/view/exporters" interface SchemaColumn { readonly name: string @@ -182,16 +183,22 @@ function isValidBBReference( return true } - if (!Array.isArray(columnData)) { + if (typeof columnData !== "string") { + return false + } + + const castedData = parseCsvExport(columnData) + + if (!Array.isArray(castedData)) { // It must be an array field return false } - if (columnSubtype === FieldSubtype.USER && columnData.length > 1) { + if (columnSubtype === FieldSubtype.USER && castedData.length > 1) { return false } - for (const d of columnData) { + for (const d of castedData) { if (!db.isGlobalUserID(d._id)) { return false }