@@ -3,6 +3,7 @@ import { Field, reduxForm } from 'redux-form';
33import Button from 'react-bootstrap/lib/Button' ;
44// import validator from 'validator';
55import userAPI from '../../api/user' ;
6+ import { validateForm } from '../../actions/formActions' ;
67import { pushErrors } from '../../actions/errorActions' ;
78import { Form , FormField , FormFooter } from '../utils/BsForm' ;
89
@@ -24,6 +25,17 @@ const validate = (values) => {
2425 return errors ;
2526} ;
2627
28+ let asyncValidate = ( values , dispatch ) => {
29+ return dispatch ( validateForm ( 'register' , 'email' , values . email ) )
30+ . then ( ( json ) => {
31+ let validationError = { } ;
32+ if ( ! json . isPassed ) {
33+ validationError . email = json . message ;
34+ throw validationError ;
35+ }
36+ } ) ;
37+ } ;
38+
2739class RegisterForm extends Component {
2840 constructor ( props ) {
2941 super ( props ) ;
@@ -46,6 +58,7 @@ class RegisterForm extends Component {
4658 const {
4759 handleSubmit,
4860 pristine,
61+ asyncValidating,
4962 submitting,
5063 invalid,
5164 } = this . props ;
@@ -74,7 +87,10 @@ class RegisterForm extends Component {
7487 placeholder = "Password"
7588 />
7689 < FormFooter >
77- < Button type = "submit" disabled = { pristine || submitting || invalid } >
90+ < Button
91+ type = "submit"
92+ disabled = { pristine || ! ! asyncValidating || submitting || invalid }
93+ >
7894 Register
7995 </ Button >
8096 </ FormFooter >
@@ -91,4 +107,6 @@ RegisterForm.contextTypes = {
91107export default reduxForm ( {
92108 form : 'register' ,
93109 validate,
110+ asyncValidate,
111+ asyncBlurFields : [ 'email' ] ,
94112} ) ( RegisterForm ) ;
0 commit comments