UNPKG

@sergiomarques/sword-validation

Version:

Field validation tooling and defaults for SWORD Health Web Clients

86 lines (81 loc) 2.38 kB
import { minLength, maxLength, required, numeric } from 'vuelidate/lib/validators'; import vRegex from './scripts/regex.js'; import { vDefaultPacks } from './scripts/defaults.js'; /* * Validations map for string based validations */ const parseValidationsStr = (vObj) => { if (!Object.keys(vObj).length) { return {}; } if (vObj.hasOwnProperty('pack')) { const packName = vObj.pack; Object.assign(vObj, vDefaultPacks[packName]); delete vObj.pack; } let validationObj = {}; Object.keys(vObj).forEach((vKey) => { const params = vObj[vKey]; const key = vKey; const validatorsToApply = validationsMap[key]; const readyValidators = {}; Object.keys(validatorsToApply).forEach((valKey) => { readyValidators[valKey] = validatorsToApply[valKey](params); }); Object.assign(validationObj, readyValidators); }); return validationObj; }; const validationsMap = { required: { required: () => required, }, minL: { minLength: (min) => { return minLength(min); }, }, maxL: { maxLength: (max) => { return maxLength(max); }, }, email: { emailFormat: () => (email) => { return vRegex.email.global.test(email); }, }, prefixAndPhoneReq: { prefixAndPhoneRequired: () => (phone) => { return vRegex.phone.complete.test(phone); }, }, prefixFormat: { prefix: () => (phone) => { if (!phone) { return true; } var phoneParts = phone.match(vRegex.phone.complete); if (!phoneParts) { return false; } const prefix = phoneParts[1]; return vRegex.phone.general.test(prefix); }, }, phoneFormat: { phoneFormat: () => (phone) => { if (!phone) { return true; } var phoneParts = phone.match(vRegex.phone.complete); if (!phoneParts) { return false; } const prefix = phoneParts[1]; const number = phoneParts[3]; return vRegex.phone.general.test(prefix) && vRegex.phone.general.test(number); }, }, }; export { parseValidationsStr };