Validation.clone() method
Clones a Validation
object.
Syntax
Validation.clone(validation)
Parameters
validation
AValidation
object to be cloned.
Return value
A new Validation
object.
Exceptions
If not a Validation
was passed in, throws the corresponding error.
Description
Clones a passed in Validation
object with its earlier added constraints and state callbacks. The passed in object can be a single or a grouping Validation
. In case of grouping Validation
, all grouped (nested) Validation
objects will be cloned recursively with their constraints and state callbacks.
The main purpose of this method is to clone validations with shared set of predicates that are used on the same kind of fields but on different forms, in order to add extra predicates, mostly on the server side, to avoid mutations. For example, sign-in and sign-up forms may have an e-mail field, but on sign-up form, this field may have additional predicate that checks an e-mail for being already registered. Also sign-in and sign-up forms usually have a password field, but on sign-up form, there is a check for password and password confirmation equality.
You will probably need to use this method explicitly in rare occasions. This method is used under the hood in the Validation.profile()
method.
Examples
Cloned grouping validation
import { Validation } from 'isomorphic-validation';
const makePredicateFn = (name) => ({ [name]: (value) => (console.log(`${name}("${value}")`), true),}[name]);
const makeValidatedCB = (name) => () => console.log(name, 'validated');
const obj1 = { value: 'obj1' };const obj2 = { value: 'obj2' };const obj3 = { value: 'obj3' };
const validation1 = Validation(obj1) .constraint(makePredicateFn('โ
predicate1')) .validated(makeValidatedCB('validation1'));
const validation2 = Validation(obj2) .constraint(makePredicateFn('โ
predicate2')) .validated(makeValidatedCB('validation2'));
const validation3 = Validation(obj3) .constraint(makePredicateFn('โ
predicate3')) .validated(makeValidatedCB('validation3'));
const validationGr1 = Validation.group(validation1, validation2) .constraint(makePredicateFn('โ
predicateGr1')) .validated(makeValidatedCB('validationGr1'));
const validationGr2 = Validation.group(validationGr1, validation3) .constraint(makePredicateFn('โ
predicateGr2')) .started(() => console.log('')) .validated(makeValidatedCB('validationGr2'));
const validationCl1 = Validation.clone(validationGr2) .constraint(makePredicateFn('โ๏ธ predicateCl1')) .validated(makeValidatedCB('validationCl1'));
await validationGr2.validate();await validationCl1.validate();
// Output://// โ
predicate1("obj1")// โ
predicateGr1("obj1")// โ
predicateGr2("obj1")// โ
predicate2("obj2")// โ
predicateGr1("obj2")// โ
predicateGr2("obj2")// โ
predicate3("obj3")// โ
predicateGr2("obj3")// validation1 validated// validation2 validated// validationGr1 validated// validation3 validated// validationGr2 validated//// โ
predicate1("obj1")// โ
predicateGr1("obj1")// โ
predicateGr2("obj1")// โ๏ธ predicateCl1("obj1")// โ
predicate2("obj2")// โ
predicateGr1("obj2")// โ
predicateGr2("obj2")// โ๏ธ predicateCl1("obj2")// โ
predicate3("obj3")// โ
predicateGr2("obj3")// โ๏ธ predicateCl1("obj3")// validation1 validated// validation2 validated// validationGr1 validated// validation3 validated// validationGr2 validated// validationCl1 validated