diff --git a/packages/builder/src/components/backend/DataTable/modals/CreateEditRow.svelte b/packages/builder/src/components/backend/DataTable/modals/CreateEditRow.svelte index 06ab8fd4a9..ce52287c99 100644 --- a/packages/builder/src/components/backend/DataTable/modals/CreateEditRow.svelte +++ b/packages/builder/src/components/backend/DataTable/modals/CreateEditRow.svelte @@ -31,7 +31,12 @@ .flat() // Prevent modal closing if there were errors return false - } else if (rowResponse.status === 400 || rowResponse.status === 500) { + } else if (rowResponse.status === 400 && rowResponse.validationErrors) { + errors = Object.keys(rowResponse.validationErrors).map(field => ({ + message: `${field} ${rowResponse.validationErrors[field][0]}`, + })) + return false + } else if (rowResponse.status === 500) { errors = [{ message: rowResponse.message }] return false } diff --git a/packages/server/src/api/controllers/row/internal.js b/packages/server/src/api/controllers/row/internal.js index 28c88c1eac..e39bc2aff9 100644 --- a/packages/server/src/api/controllers/row/internal.js +++ b/packages/server/src/api/controllers/row/internal.js @@ -57,7 +57,7 @@ exports.patch = async ctx => { }) if (!validateResult.valid) { - throw validateResult.errors + throw { validation: validateResult.errors } } // returned row is cleaned and prepared for writing to DB @@ -105,7 +105,7 @@ exports.save = async function (ctx) { }) if (!validateResult.valid) { - throw validateResult.errors + throw { validation: validateResult.errors } } // make sure link rows are up to date diff --git a/packages/server/src/api/index.js b/packages/server/src/api/index.js index 81601eea1a..c473bf619b 100644 --- a/packages/server/src/api/index.js +++ b/packages/server/src/api/index.js @@ -58,6 +58,7 @@ router.use(async (ctx, next) => { ctx.body = { message: err.message, status: ctx.status, + validationErrors: err.validation, } if (env.NODE_ENV !== "jest") { ctx.log.error(err)