@sergiomarques/sword-validation
Version:
Field validation tooling and defaults for SWORD Health Web Clients
86 lines (81 loc) • 2.38 kB
JavaScript
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 };