Validator Class for Form Validation - salimakhtar92/ReactJs GitHub Wiki

class Validation {
  constructor(rules) {
    this.validationRules = rules;
  }

  validate(state) {
    let validation = this.valid(this.validationRules);
    this.validationRules.forEach(rule => {
      if(!validation[rule.field].isInvalid) {
        const fieldValue = state[rule.field];
        const validationMethod = rule.method;
        if(validationMethod(fieldValue) !== rule.validWhen){
          this.inValid(validation, rule);
        }
      }
    });
    return validation;
  }

  inValid(validation, rule) {
    validation[rule.field] = {isInvalid: true, message: rule.message};
    validation.isValid = false;
  }

  valid(rules) {
    const validation = {};
    rules.forEach(rule => {
      validation[rule.field] = {isInvalid: false, message: ''};
    });

    return {isValid: true, ...validation};
  }
}

export default Validation;

Initialisation of validator class

const validationRules = [
  {
    field: 'firstName',
    method: (value) => Boolean(value),
    validWhen: true,
    message: 'Please enter the First Name'
  },
  {
    field: 'firstName',
    method: (value) => value.length > 4,
    validWhen: true,
    message: 'First Name should be contain atleast 5 char'
  },
  {
    field: 'lastName',
    method: (value) => Boolean(value),
    validWhen: true,
    message: 'Please enter the Last Name'
  }
];

const validator = new Validation(validationRules);

const validationState = {
    firstName: '',
    lastName: ''
  }

const validation = validator.validate(validationState);