utils/validation.js

import React from 'react';

/**
 * @namespace utils/validation
 */
/**
 * Validate one field for passed rule
 *
 * @memberof utils/validation
 * @async
 * @param {object} validationObj
 * @returns {void}
 */
const checkRules = (validationObj) => new Promise((resolve) => {
  let errorMsg = null;
  if (validationObj.rules.includes('mandatory') && !validationObj.value) {
    errorMsg = `${validationObj.label} is required !`;
  }
  if (errorMsg) {
    const error = {
      [validationObj.fieldName]: (
        <div className="l-form-msg mt-3">{errorMsg}</div>
      ),
    };
    resolve(error);
  } else {
    resolve(null);
  }
});

/**
 * Validate all fields
 *
 * @memberof utils/validation
 * @async
 * @param {Array} validationParams
 * @returns {void}
 */
const validateFields = (validationParams) => new Promise((resolve, reject) => {
  const values = validationParams.map((validationObj) => (
    checkRules(validationObj)));
  Promise.all(values).then((val) => {
    const errors = val.filter((e) => !!e);
    if (errors.length > 0) {
      reject(errors);
    } else {
      resolve();
    }
  });
}).catch((err) => {
  let error = {};
  err.map((e) => {
    error = {
      ...error,
      ...e,
    };
  });
  throw error;
});

export default validateFields;