@trapcode/codebase
Version:
For TrapCode
234 lines (189 loc) • 6.8 kB
JavaScript
let validators = {
must(value) {
return value.length > 0;
},
min(value, option) {
console.log(value);
value = parseFloat(value);
option = parseFloat(option);
return value >= option;
},
max(value, option) {
value = parseFloat(value);
option = parseFloat(option);
return value <= option;
},
minLength(value, option) {
value = validators._trimIfString_(value);
return value.length >= option;
},
maxLength(value, option) {
value = validators._trimIfString_(value);
return value.length <= option;
},
selectMin(value, option) {
return validators.minLength(value, option)
},
_trimIfString_(value) {
return typeof value === 'string' ? value.trim() : value
}
};
let validatorExtenders = {};
let errorMessages = {
default: ':param returned :false',
must: ':param is required.',
min: ':param is too small. (Min. :option)',
max: ':param is too big. (Max. :option)',
minLength: ':param is too short. (Min. :option characters)',
maxLength: ':param is too long. (Max. :option characters)',
selectMin: 'Select at-least :option :param.',
selectMax: 'Select at-most :option :param.',
};
let ObjectValidatorFunctions = {
yes() {
},
beforeValidation() {
},
onEachError(param, msg) {
alert(msg);
console.log([param, msg])
}
};
let ObjectValidatorEngine = {
parseMessage($rule, $name, $option) {
let msg = errorMessages.default;
if (errorMessages.hasOwnProperty($rule)) {
msg = errorMessages[$rule];
}
msg = msg.replace(':param', $name);
if (typeof $option != 'function') {
msg = msg.replace(':option', $option);
}
return msg;
}
};
let ObjectValidatorEditor = {
addValidators($validators) {
if (!Array.isArray($validators) && typeof $validators === 'object') {
$validators = [$validators];
}
for (let i = 0; i < $validators.length; i++) {
let validator = $validators[i];
if (validator.hasOwnProperty('error')) {
errorMessages[validator.name] = validator.error
}
if (validator.hasOwnProperty('extendValidator') &&
validators.hasOwnProperty(validator.name)) {
validatorExtenders[validator.name] = validator.extendValidator;
} else if (validator.hasOwnProperty('validator')) {
validators[validator.name] = validator.validator;
}
}
},
overrideDefaultFunction(key, value) {
if (ObjectValidatorFunctions.hasOwnProperty(key)) {
ObjectValidatorFunctions[key] = value
}
},
overrideDefaultFunctions(functions) {
let keys = Object.keys(functions);
for (let i = 0; i < keys.length; i++) {
let _function = keys[i];
ObjectValidatorEditor.overrideDefaultFunction(_function, functions[_function]);
}
}
};
class ObjectValidator {
constructor(form) {
return this.setObject(form);
}
rules(validateWith) {
this.validateWith = validateWith;
return this;
}
setObject(form) {
this.form = form;
return this;
}
then(functions) {
if (typeof functions === 'function') {
ObjectValidatorEditor.overrideDefaultFunction('yes', functions)
} else {
let functionKeys = Object.keys(functions);
for (let i = 0; i < functionKeys.length; i++) {
let config = functionKeys[i];
ObjectValidatorEditor.overrideDefaultFunction(config, functions[config])
}
}
return this
}
validate(functions = null) {
if (functions !== null) {
return this.then(functions).validate();
}
return this.runValidation();
}
runValidation() {
let vm;
let form = this.form;
let validateWith = this.validateWith;
let functions = ObjectValidatorFunctions;
// Set Found Error to stop once true. One Error at a time.
let foundError = false;
let totalParams = Object.keys(validateWith).length;
let paramsChecked = 0;
vm = this;
// Run before validation function
functions.beforeValidation();
if (Array.isArray(validateWith) && this.usingFormValidator != null) {
let newValidation = {};
validateWith.forEach(function (field) {
if (vm.usingFormValidator.hasOwnProperty(field)) {
newValidation[field] = vm.usingFormValidator[field];
}
});
validateWith = newValidation
}
_.each(validateWith, function (rules, param) {
if (!foundError) {
_.each(rules, function (options, rule) {
let isValid, msg, checkThis;
checkThis = true;
if (rules.hasOwnProperty('if')) {
checkThis = rules['if'];
if (typeof checkThis == 'function') {
checkThis = checkThis(form[param])
}
}
if (checkThis && !foundError && validators.hasOwnProperty(rule)) {
if (validatorExtenders.hasOwnProperty(rule)) {
isValid = validatorExtenders[rule](validators[rule], form[param], options);
} else {
isValid = validators[rule](form[param], options);
}
if (!isValid) {
foundError = true;
if (functions.hasOwnProperty('onEachError')) {
if (!rules.hasOwnProperty('name')) {
rules['name'] = _.startCase(param)
}
msg = ObjectValidatorEngine.parseMessage(rule, rules.name, options);
functions.onEachError(param, msg);
}
}
}
});
paramsChecked++;
if (paramsChecked === totalParams && !foundError) {
if (functions.hasOwnProperty('yes')) {
functions.yes(form);
}
}
}
});
return foundError;
}
}
ObjectValidator.prototype.form = {};
ObjectValidator.prototype.validateWith = [];
export {ObjectValidator, ObjectValidatorEditor};