diff --git a/packages/server/src/api/controllers/view/exporters.ts b/packages/server/src/api/controllers/view/exporters.ts index b04d139e74..d6caff6035 100644 --- a/packages/server/src/api/controllers/view/exporters.ts +++ b/packages/server/src/api/controllers/view/exporters.ts @@ -44,6 +44,6 @@ 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, '"')) +export function parseCsvExport(value: string) { + return JSON.parse(value?.replace(/'/g, '"')) as T } diff --git a/packages/server/src/utilities/schema.ts b/packages/server/src/utilities/schema.ts index 97e67e92a7..79c797ab00 100644 --- a/packages/server/src/utilities/schema.ts +++ b/packages/server/src/utilities/schema.ts @@ -153,6 +153,7 @@ export function parse(rows: Rows, schema: Schema): Rows { } const columnType = schema[columnName].type + const columnSubtype = schema[columnName].subtype if (columnType === FieldTypes.NUMBER) { // If provided must be a valid number @@ -163,7 +164,22 @@ export function parse(rows: Rows, schema: Schema): Rows { ? new Date(columnData).toISOString() : columnData } else if (columnType === FieldTypes.BB_REFERENCE) { - parsedRow[columnName] = columnData && parseCsvExport(columnData) + const parsedValues = + !!columnData && parseCsvExport<{ _id: string }[]>(columnData) + if (!parsedValues) { + parsedRow[columnName] = undefined + } else { + switch (columnSubtype) { + case FieldSubtype.USER: + parsedRow[columnName] = parsedValues[0]?._id + break + case FieldSubtype.USERS: + parsedRow[columnName] = parsedValues.map(u => u._id) + break + default: + utils.unreachable(columnSubtype) + } + } } else { parsedRow[columnName] = columnData }