Validation.group() method
Groups Validation
objects into one.
Syntax
Validation.group(validation1, validation2, /* ..., */ validationN)Validation.group([validation1, validation2, /* ..., */ validationN])Validation.group([validation1, validation2], /* ..., */ validationN)Validation.group(validation1, [validation2, /* ..., */ validationN])Validation.group([[validation1, validation2], /* ..., */ validationN])Validation.group(validation1, [[validation2], /* ..., */ validationN])Validation.group(validation1, [validation2], /* ..., */ [validationN])
Parameters
validation1, ..., validationN
AValidation
object.
Return value
A new grouping Validation
object.
Exceptions
If not a Validation
was passed in or an Array
that contains not a Validation
, throws the corresponding error.
Description
Accepts Validation
objects or arrays of Validation
objects of any nesting level or both in any combination. The Validation
objects passed in can be single as well as other grouping Validation
objects. Repetitive Validation
objects will be ignored, only the unique ones will be grouped. The returned grouping Validation
object “subscribes” to state changes of the grouped Validation
objects and its validity state depends on them.
Examples
Here validation1
and validation2
are grouped into validationGr
and have the same set of predicate functions. First isGreaterOrEqual(1)
and isGreaterOrEqual(2)
are added to them respectively, then isNaturalNumber
is added to them both through the grouping validation validationGr
. See how a particular predicate group can be validated by passing its associated object into the Validation.validate()
method. When both validation1
and validation2
are in “valid” state, validationGr
also changes its state to “valid” even though not having been validated directly.
import { Validation } from 'isomorphic-validation';
const logFn = (fn) => (...args) => { const res = fn(...args); console.log(`${fn.name}(${args.join(',')}) \t--> ${res}`); return res;};
const nameReturnedFn = (fn) => (...args) => Object.defineProperty( fn(...args), 'name', { value: `${fn.name}(${args.join(',')})` }, );
// predicate functionsconst isNaturalNumber = (value) => /^[1-9]+[0-9]*$/.test(value);const isGreaterOrEqual = (number) => (value) => Number(value) >= Number(number);
// validatable objectsconst obj1 = { value: 0 };const obj2 = { value: 0 };
const validation1 = Validation(obj1) .started(() => console.log('started validation1...'));
const validation2 = Validation(obj2) .started(() => console.log('started validation2...'));
const validationGr = Validation.group(validation1, validation2) .started(() => console.log('started validationGr...'));
validation1.constraint(logFn(nameReturnedFn(isGreaterOrEqual)(1)));validation2.constraint(logFn(nameReturnedFn(isGreaterOrEqual)(2)));validationGr.constraint(logFn(isNaturalNumber)); // added to both validations
obj1.value = 1.1;validationGr.validate(obj1); // validating validation1 by its bound objectconsole.table({ validation1, validation2, validationGr}, ['isValid']);console.log('');
obj1.value = 1;validation1.validate(); // validating validation1 directlyconsole.table({ validation1, validation2, validationGr}, ['isValid']);console.log('');
obj2.value = 2.1;validationGr.validate(obj2); // validating validation2 by its bound objectconsole.table({ validation1, validation2, validationGr}, ['isValid']);console.log('');
obj2.value = 2;validation2.validate(); // validating validation2 directlyconsole.table({ validation1, validation2, validationGr}, ['isValid']);console.log('');
obj2.value = 3.1;validationGr.validate(); // validating both validation objectsconsole.table({ validation1, validation2, validationGr}, ['isValid']);console.log('');
// output://// started validationGr...// started validation1...// isGreaterOrEqual(1)(1.1) --> true// isNaturalNumber(1.1) --> false// ┌──────────────┬─────────┐// │ (index) │ isValid │// ├──────────────┼─────────┤// │ validation1 │ false │// │ validation2 │ false │// │ validationGr │ false │// └──────────────┴─────────┘//// started validation1...// isGreaterOrEqual(1)(1) --> true// isNaturalNumber(1) --> true// ┌──────────────┬─────────┐// │ (index) │ isValid │// ├──────────────┼─────────┤// │ validation1 │ true │// │ validation2 │ false │// │ validationGr │ false │// └──────────────┴─────────┘//// started validationGr...// started validation2...// isGreaterOrEqual(2)(2.1) --> true// isNaturalNumber(2.1) --> false// ┌──────────────┬─────────┐// │ (index) │ isValid │// ├──────────────┼─────────┤// │ validation1 │ true │// │ validation2 │ false │// │ validationGr │ false │// └──────────────┴─────────┘//// started validation2...// isGreaterOrEqual(2)(2) --> true// isNaturalNumber(2) --> true// ┌──────────────┬─────────┐// │ (index) │ isValid │// ├──────────────┼─────────┤// │ validation1 │ true │// │ validation2 │ true │// │ validationGr │ true │// └──────────────┴─────────┘//// started validationGr...// started validation1...// started validation2...// isGreaterOrEqual(1)(1) --> true// isNaturalNumber(1) --> true// isGreaterOrEqual(2)(3.1) --> true// isNaturalNumber(3.1) --> false// ┌──────────────┬─────────┐// │ (index) │ isValid │// ├──────────────┼─────────┤// │ validation1 │ true │// │ validation2 │ false │// │ validationGr │ false │// └──────────────┴─────────┘