Validate everything on form submit. Don't use pwd1 where we didn't define it & fix some error codes.
This commit is contained in:
parent
02e41450b4
commit
ecfdd3593c
1 changed files with 41 additions and 22 deletions
|
@ -65,20 +65,46 @@ module.exports = React.createClass({
|
||||||
onSubmit: function(ev) {
|
onSubmit: function(ev) {
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
|
|
||||||
var promise = this.props.onRegisterClick({
|
// validate everything, in reverse order so
|
||||||
username: this.refs.username.value.trim(),
|
// the error that ends up being displayed
|
||||||
password: pwd1,
|
// is the one from the first invalid field.
|
||||||
email: this.refs.email.value.trim()
|
// It's not super ideal that this just calls
|
||||||
});
|
// onError once for each invalid field.
|
||||||
|
this.validateField(FIELD_PASSWORD_CONFIRM);
|
||||||
|
this.validateField(FIELD_PASSWORD);
|
||||||
|
this.validateField(FIELD_USERNAME);
|
||||||
|
this.validateField(FIELD_EMAIL);
|
||||||
|
|
||||||
if (promise) {
|
if (this.allFieldsValid()) {
|
||||||
ev.target.disabled = true;
|
var promise = this.props.onRegisterClick({
|
||||||
promise.finally(function() {
|
username: this.refs.username.value.trim(),
|
||||||
ev.target.disabled = false;
|
password: this.refs.password.value.trim(),
|
||||||
|
email: this.refs.email.value.trim()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (promise) {
|
||||||
|
ev.target.disabled = true;
|
||||||
|
promise.finally(function() {
|
||||||
|
ev.target.disabled = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if all fields were valid last time
|
||||||
|
* they were validated.
|
||||||
|
*/
|
||||||
|
allFieldsValid: function() {
|
||||||
|
var keys = Object.keys(this.state.fieldValid);
|
||||||
|
for (var i = 0; i < keys.length; ++i) {
|
||||||
|
if (this.state.fieldValid[keys[i]] == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
validateField: function(field_id) {
|
validateField: function(field_id) {
|
||||||
var pwd1 = this.refs.password.value.trim();
|
var pwd1 = this.refs.password.value.trim();
|
||||||
var pwd2 = this.refs.passwordConfirm.value.trim()
|
var pwd2 = this.refs.passwordConfirm.value.trim()
|
||||||
|
@ -120,25 +146,18 @@ module.exports = React.createClass({
|
||||||
this.markFieldValid(
|
this.markFieldValid(
|
||||||
field_id,
|
field_id,
|
||||||
false,
|
false,
|
||||||
"RegistrationForm.ERR_PASSWORD_MISSING"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case FIELD_PASSWORD_CONFIRM:
|
|
||||||
if (pwd1 == '') {
|
|
||||||
this.markFieldValid(
|
|
||||||
field_id, false,
|
|
||||||
"RegistrationForm.ERR_PASSWORD_MISSING"
|
|
||||||
);
|
|
||||||
} else if (pwd1 != pwd2) {
|
|
||||||
this.markFieldValid(
|
|
||||||
field_id, false,
|
|
||||||
"RegistrationForm.ERR_PASSWORD_LENGTH"
|
"RegistrationForm.ERR_PASSWORD_LENGTH"
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
this.markFieldValid(field_id, true);
|
this.markFieldValid(field_id, true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case FIELD_PASSWORD_CONFIRM:
|
||||||
|
this.markFieldValid(
|
||||||
|
field_id, pwd1 == pwd2,
|
||||||
|
"RegistrationForm.ERR_PASSWORD_MISMATCH"
|
||||||
|
);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue