Async Validator Arrays and Objects
import {validateAsync, required, length} from 'strickland';
function validateCity(address) {
return new Promise((resolve) => {
if (!address) {
resolve(true);
}
const {city, state} = address;
if (city === 'Hill Valley' && state !== 'CA') {
resolve({
isValid: false,
message: 'Hill Valley is in California'
});
} else {
resolve(true);
}
});
}
const validatePerson = {
name: [
required(),
length({
minLength: 2,
maxLength: 20,
message: 'Name must be 2-20 characters'
})
],
username: [
required(),
length(2, 20),
usernameIsAvailable
],
address: [
every([required(), minLength(1)], {message: 'At least 1 address is required'}),
arrayElements([
required({message: 'Address is required'}),
{
street: [required(), length(2, 40)],
city: [required(), length(2, 40)],
state: [required(), length(2, 2)]
},
validateCity
])
]
};
const person = {
name: 'Marty McFly',
username: 'marty',
address: [
{
street: '9303 Lyon Dr.',
city: 'Hill Valley',
state: 'WA'
}
]
};
validateAsync(validatePerson, person).then((result) => {
/*
result = {
isValid: false,
objectProps: {
name: {
isValid: true,
value: 'Marty McFly'
},
username: {
isValid: false,
value: 'marty',
message: '"marty" is not available'
},
address: {
isValid: false,
arrayElements: [
{
isValid: false,
message: 'Hill Valley is in California',
objectProps: {
street: {isValid: true},
city: {isValid: true},
state: {isValid: true}
}
}
]
}
}
}
*/
});every
all
some
arrayElements
objectProps
Last updated