Fix issue with array field validation
This commit is contained in:
parent
c8121ed0e3
commit
c3450a3e1e
|
@ -52,21 +52,29 @@ exports.validate = async ({ appId, tableId, row, table }) => {
|
|||
const constraints = cloneDeep(table.schema[fieldName].constraints)
|
||||
const type = table.schema[fieldName].type
|
||||
// special case for options, need to always allow unselected (null)
|
||||
if (
|
||||
(type === FieldTypes.OPTIONS || type === FieldTypes.ARRAY) &&
|
||||
constraints.inclusion
|
||||
) {
|
||||
if (type === FieldTypes.OPTIONS && constraints.inclusion) {
|
||||
constraints.inclusion.push(null)
|
||||
}
|
||||
let res
|
||||
|
||||
// Validate.js doesn't seem to handle array
|
||||
if (type === FieldTypes.ARRAY && row[fieldName] && row[fieldName].length) {
|
||||
row[fieldName].map(val => {
|
||||
if (!constraints.inclusion.includes(val)) {
|
||||
errors[fieldName] = "Field not in list"
|
||||
}
|
||||
})
|
||||
if (type === FieldTypes.ARRAY) {
|
||||
const hasValues =
|
||||
Array.isArray(row[fieldName]) && row[fieldName].length > 0
|
||||
|
||||
// Check values are valid if values are specified
|
||||
if (hasValues) {
|
||||
row[fieldName].map(val => {
|
||||
if (!constraints.inclusion.includes(val)) {
|
||||
errors[fieldName] = "Value not in list"
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// Check for required constraint
|
||||
if (constraints.presence === true && !hasValues) {
|
||||
errors[fieldName] = "Required field"
|
||||
}
|
||||
} else if (type === FieldTypes.JSON && typeof row[fieldName] === "string") {
|
||||
// this should only happen if there is an error
|
||||
try {
|
||||
|
|
Loading…
Reference in New Issue