@degjs/form-validation-required
Version:
A required field rule for the DEGJS formValidation module.
59 lines (51 loc) • 1.76 kB
JavaScript
const required = (options) => {
const defaults = {
message: 'This field is required.',
messageAttr: 'data-validation-required-message',
events: [
'focusout',
'submit'
]
};
let settings = Object.assign({}, defaults, options);
function getSettings() {
return settings;
}
function isRelevant(field) {
return field.inputEls.some(el => el.getAttribute('required') !== null);
}
function validate(field) {
return new Promise(function(resolve, reject) {
if (field.inputEls) {
const firstInputType = field.inputEls[0].getAttribute('type');
const method = firstInputType === 'checkbox' || firstInputType === 'radio' ? 'some' : 'every';
resolve({
valid: field.inputEls[method](el => {
const elType = el.getAttribute('type');
if (elType === 'checkbox' || elType === 'radio') {
return el.checked === true;
} else {
return el.value.length > 0;
}
})
});
} else {
reject('required: No inputs set.');
}
});
}
function postprocessMessage(msg) {
if (settings.postprocessMessage && typeof settings.postprocessMessage === 'function') {
return settings.postprocessMessage(msg);
} else {
return msg;
}
}
return {
settings: getSettings(),
isRelevant: isRelevant,
validate: validate,
postprocessMessage: postprocessMessage
};
}
export default required;