import { ValidationRule, ValidationRules, ValidationState } from '../models/Validation'; import { isNull, isUndefined } from 'util'; export function validationOnInit( validationRules: ValidationRules, assignedRules: Array, name: string, value?: any, translator?: Function ) { if (!isNull(value) && !isUndefined(value) && String(value).length !== 0 && value !== false) { return validation(validationRules, assignedRules, value, name); } let state = ValidationState.None; let errorMessage = ''; if (assignedRules && assignedRules.length) { if (assignedRules.some(rule => rule.name === 'required')) { state = ValidationState.Required; } errorMessage = assignedRules[0].errorMessage ? assignedRules[0].errorMessage : validationRules[assignedRules[0].name].errorMessage; } return { name, state, errorMessage: translator(errorMessage).toString() }; } export function validation( validationRules: ValidationRules, assignedRules: Array, value: any, name: string, translator?: Function ) { let state = ValidationState.Valid; let errorMessage = ''; if (assignedRules) { if (String(value).length === 0 && !assignedRules.some(rule => rule.name === 'required')) { return { name, state: ValidationState.None }; } assignedRules.forEach((rule: ValidationRule) => { if (state === ValidationState.Invalid) return; if (!validationRules[rule.name].rule(value, rule.data)) { state = ValidationState.Invalid; errorMessage = rule.errorMessage ? translator(rule.errorMessage, { value: rule.data }).toString() : translator(validationRules[rule.name].errorMessage, { value: rule.data }).toString(); } }); return { name, state, errorMessage }; } return { name, state: ValidationState.None }; } export function ukPhoneNormalizer(phone: string) { if (!phone) return { foreignPhone: '', ukPhone: '' }; return { foreignPhone: `tel:+44${phone.slice(1, phone.length)}`, ukPhone: phone.replace(/([\d]{4})([\d]{3})(\d*)/, replacer) }; } export function replacer( match: string, p1: string, p2: string, p3: string, offset: number, string: string ) { return [p1, p2, p3].join(' '); } export function isDateValid(dateArgs: { day: string; month: string; year: string }) { let dayNumber = Number(dateArgs.day), monthNumber = Number(dateArgs.month) - 1, yearNumber = Number(dateArgs.year); let date = new Date(yearNumber, monthNumber, dayNumber); return ( date.getFullYear() == yearNumber && date.getMonth() == monthNumber && date.getDate() == dayNumber ); } export function getConfigByNames( name: string | string[], config: { [key: string]: any } ): { [key: string]: any } { let configs: { [key: string]: any } = {}; if (name.constructor === Array) { (name as string[]).forEach(_name => { if (config.hasOwnProperty(_name)) { configs[_name] = config[_name]; } }); } else { configs[name as string] = config[name as string]; } return configs; }