Meu código funciona perfeitamente, porém o instrutor adiciona um if a mais. Seguem os dois para comparação.
Meu código:
valida(state){
let validacao = this.valido();
this.validacoes.forEach(regra => {
const campoValor = state[regra.campo.toString()];
const args = regra.args || [];
const metodoValidacao = typeof regra.metodo === 'string' ?
validador[regra.metodo] : regra.metodo;
if(metodoValidacao(campoValor,...args, state) != regra.validoQuando){
validacao[regra.campo] = {
isInvalid:true,
message: regra.mensagem
}
validacao.isValid = false;
};
});
return validacao;
}
Código do instrutor:
valida(state) {
//itera pelo array de regras de validação e constrói
//um objeto validacao e retorna-o
//começa assumindo que está tudo válido, recebe o
//objeto do método valido.
let validacao = this.valido();
this.validacoes.forEach(regra => {
//Se o campo não tiver sido marcado
//anteriormente como invalido por uma regra.
if (!validacao[regra.campo].isInvalid) {
//Determina o valor do campo, o método a ser invocado
//e os argumentos opcionais pela definição da regra
const campoValor = state[regra.campo.toString()];
const args = regra.args || [];
//if ternário para estar preparado caso
//alguém passe o método direto sem ser string
const metodoValidacao = typeof regra.metodo === 'string' ?
validador[regra.metodo] : regra.metodo;
//invoca o método específico da regra
if (metodoValidacao(campoValor, ...args, state) !== regra.validoQuando) {
//modifica o objeto no campo específico
validacao[regra.campo] = {
isInvalid: true,
message: regra.mensagem
};
validacao.isValid = false;
}
}
});
return validacao;
}