kns-checkpoint
Version:
checkpoint kinda object control
152 lines (136 loc) • 5.16 kB
JavaScript
/**
*
* Error object
*
* error = {
* fieldConfigName: {
* label:
* message:
* }
*
* }
*/
var errors;
var record;
var fieldsConfig;
var payload;
var ines;
module.exports = function (FieldsConfig, Payload, Ines, modelInstance) {
errors = {};
record = {};
fieldsConfig = FieldsConfig || {};
payload = Payload || {};
ines = Ines || "n";
Object.keys(fieldsConfig).forEach(function (fieldConfigName) {
var fieldConfig = fieldsConfig[fieldConfigName];
var validationRules = fieldConfig.validate || {};
if ( fieldConfig.type !== "image" || fieldConfig !== "file" ) {
record[fieldConfigName] = payload[fieldConfigName] || null;
}
if ( fieldConfig.ines.indexOf(ines) == -1 ) {
return;
}
if ( !validationRules ) {
errors["Developer"] = {
label: fieldConfigName,
i18n: {
message: "ERROR_DEVELOPER_FIELD_MUST_HAVE",
arguments: [fieldConfigName, "validation object"]
}
};
}
else if ( validationRules.noteditable && ( modelInstance[fieldConfigName] !== payload[fieldConfigName] ) ) {
errors[fieldConfigName] = {
label: fieldConfigName.label,
i18n: {
message: "ERROR_FORM_FIELD_CANT_BE_EDITED"
}
};
}
else {
// check validation.required
if ( ( validationRules.required && !payload[fieldConfigName] )
&& !( modelInstance && modelInstance[fieldConfigName] && fieldConfig.type === "image" )
&& !( modelInstance && modelInstance[fieldConfigName] && fieldConfig.type === "file" )
&& !( modelInstance && modelInstance[fieldConfigName] && fieldConfig.type === "relation" )
&& !( fieldConfig.type === "checkbox" ) ) {
errors[fieldConfigName] = {
label: fieldConfig.label,
i18n: {
message: "ERROR_FORM_FIELD_CANT_BE_BLANK"
}
};
}
else if ( payload[fieldConfigName] ) {
// continue with types.
if ( fieldConfig.type === "text" ||
fieldConfig.type === "textfield" ||
fieldConfig.type === "password" ) {
_stringCheck(fieldConfigName, validationRules);
}
if ( fieldConfig.type === "number" ) {
_numberCheck(fieldConfigName, validationRules);
}
}
}
});
return {
"errors": errors,
"record": record
};
};
function _stringCheck(fieldConfigName, validationRules) {
var payloadString = payload[fieldConfigName];
Object.keys(validationRules).forEach(function (validationRuleName) {
if ( validationRuleName === "min" && payloadString.length < ~~validationRules["min"] ) {
errors[fieldConfigName] = {
label: fieldsConfig[fieldConfigName].label,
i18n: {
message: "ERROR_FORM_FIELD_CONTAIN_FEW_CHARACTER",
arguments: [validationRules["min"]]
}
};
}
else if ( validationRuleName === "max" && payloadString.length > ~~validationRules["max"] ) {
errors[fieldConfigName] = {
label: fieldsConfig[fieldConfigName].label,
i18n: {
message: "ERROR_FORM_FIELD_CONTAIN_MORE_CHARACTER",
arguments: [validationRules["max"]]
}
};
}
else if ( validationRuleName === "same" && payloadString !== payload[validationRules["same"]] ) {
errors[fieldConfigName] = {
label: fieldsConfig[fieldConfigName].label,
i18n: {
message: "ERROR_FORM_FIELD_MUST_HAVE_SAME_CONTENT",
arguments: [fieldsConfig[[validationRules["same"]]].label]
}
};
}
});
}
function _numberCheck(fieldConfigName, validationRules) {
var payloadNumber = ~~payload[fieldConfigName];
Object.keys(validationRules).forEach(function (validationRuleName) {
if ( validationRuleName === "min" && payloadNumber.length < ~~validationRules["min"] ) {
errors[fieldConfigName] = {
label: fieldsConfig[fieldConfigName].label,
i18n: {
message: "ERROR_FORM_MUST_BE_SMALLER_THAN",
arguments: [validationRules["min"]]
}
};
}
else if ( validationRuleName === "max" && payloadNumber.length > ~~validationRules["max"] ) {
errors[fieldConfigName] = {
label: fieldsConfig[fieldConfigName].label,
i18n: {
message: "ERROR_FORM_MUST_BE_GREATER_THAN",
arguments: [validationRules["max"]]
}
};
}
});
}