import { ValidationRules } from '../models/Validation'; import * as validator from 'validator'; let currencyFormatter = require('currency-formatter'); import { isDateValid } from './helper'; let validationRules: ValidationRules = { maxLength: { errorMessage: 'This field has exceeded the maximum length', rule: (value: string, length: number) => { return String(value).length < length; } }, required: { errorMessage: 'validations.requiredError', rule: (value: any) => { if (typeof value === 'boolean') { return value; } return String(value).trim().length > 0; } }, email: { errorMessage: 'validations.emailError', rule: (value: string) => { return validator.isEmail(String(value)); } }, alphabet: { errorMessage: 'Please check your input', rule: (value: string) => { return validator.isAlpha(value); } }, alphaNumeric: { errorMessage: 'Please check your input', rule: (value: string) => { return validator.isAlphanumeric(value); } }, alphabetSpaceAndDash: { errorMessage: 'Enter alphabetic and dash characters only', rule: (value: string) => { return validator.matches(String(value), /^[a-zA-Z -]*$/); } }, alphabetAndSpecialCharacters: { errorMessage: 'validations.alphabetAndSpecialCharacters', rule: (value: string) => { return validator.matches(String(value), /^[a-zA-Z '-]*$/); } }, number: { errorMessage: 'Enter numbers only.', rule: (value: string) => { return validator.matches(String(value), /^\d+$/); } }, phone: { errorMessage: 'validations.mobileError', rule: (value: string) => { return validator.matches(String(value), /0[0-9]{10}/); } }, unique: { errorMessage: 'That field must be uinque', rule: (value: string, list: Array) => { let listLower = list .join('`') .toLowerCase() .split('`'); return listLower.indexOf(String(value).toLowerCase()) === -1; } }, match: { errorMessage: 'invalid field', rule: (value: string, toMatch: string) => { return String(value) === toMatch; } }, regex: { errorMessage: 'validations.regexError', rule: (value: string, regex: RegExp) => { return validator.matches(String(value), regex); } }, minNumber: { errorMessage: 'validations.minNumber', rule: (value: string, data: { minValue: string; currency?: string }) => { let unformatted = currencyFormatter.unformat(value, { code: data.currency, decimal: true }); return unformatted > data.minValue; } }, date: { errorMessage: 'validations.invalidDate', rule: (value: string) => { if (!value) return false; let year = value.substring(0, 4); let month = value.substring(4, 6); let day = value.substring(6, 8); return isDateValid({ day, month, year }); } } }; export default validationRules;