1
- /* eslint-disable */
1
+
2
2
// TODO: Fix all eslint issues
3
3
import React , { Component , PropTypes } from 'react' ;
4
4
import connect from 'react-redux/lib/components/connect' ;
@@ -10,73 +10,85 @@ import actions from '../actions';
10
10
import { validate , isValid } from '../utils' ;
11
11
12
12
class Form extends Component {
13
- handleSubmit ( e ) {
14
- e . preventDefault ( ) ;
13
+ constructor ( props ) {
14
+ super ( props ) ;
15
15
16
+ this . handleSubmit = this . handleSubmit . bind ( this ) ;
17
+ }
18
+ componentDidUpdate ( prevProps ) {
19
+ /* eslint-disable react/prop-types */
16
20
const {
17
- model,
18
21
validators,
19
- onSubmit,
20
- dispatch
22
+ model,
23
+ dispatch,
24
+ validateOn,
21
25
} = this . props ;
22
- const modelValue = _get ( this . props , model ) ;
26
+ /* eslint-enable react/prop-types */
23
27
24
- const valid = isValid ( mapValues ( validators , ( validator , field ) => {
28
+ if ( validateOn !== 'change' ) return ;
29
+
30
+ mapValues ( validators , ( validator , field ) => {
25
31
const fieldModel = [ model , field ] . join ( '.' ) ;
26
32
const value = _get ( this . props , fieldModel ) ;
27
- const validity = validate ( validator , value ) ;
28
33
29
- dispatch ( actions . setValidity ( fieldModel , validate ( validator , value ) ) ) ;
34
+ if ( value === _get ( prevProps , fieldModel ) ) return ;
30
35
31
- return isValid ( validity ) ;
32
- } ) ) ;
36
+ const validity = validate ( validator , value ) ;
33
37
34
- if ( onSubmit && ! ! valid ) {
35
- onSubmit ( modelValue ) ;
36
- }
38
+ dispatch ( actions . setValidity ( fieldModel , validity ) ) ;
39
+ } ) ;
37
40
}
38
41
39
- componentDidUpdate ( prevProps ) {
42
+ handleSubmit ( e ) {
43
+ e . preventDefault ( ) ;
44
+
45
+ /* eslint-disable react/prop-types */
40
46
const {
41
- validators,
42
47
model,
43
- modelValue,
48
+ validators,
49
+ onSubmit,
44
50
dispatch,
45
- validateOn
46
51
} = this . props ;
52
+ /* eslint-enable react/prop-types */
47
53
48
- if ( validateOn !== 'change' ) return ;
54
+ const modelValue = _get ( this . props , model ) ;
49
55
50
- mapValues ( validators , ( validator , field ) => {
56
+ const valid = isValid ( mapValues ( validators , ( validator , field ) => {
51
57
const fieldModel = [ model , field ] . join ( '.' ) ;
52
58
const value = _get ( this . props , fieldModel ) ;
53
-
54
- if ( value === _get ( prevProps , fieldModel ) ) return ;
55
-
56
59
const validity = validate ( validator , value ) ;
57
60
58
61
dispatch ( actions . setValidity ( fieldModel , validate ( validator , value ) ) ) ;
59
- } ) ;
62
+
63
+ return isValid ( validity ) ;
64
+ } ) ) ;
65
+
66
+ if ( onSubmit && ! ! valid ) {
67
+ onSubmit ( modelValue ) ;
68
+ }
60
69
}
61
70
62
71
render ( ) {
72
+ /* eslint-disable react/prop-types */
63
73
return (
64
74
< form
65
75
{ ...this . props }
66
- onSubmit = { ( e ) => this . handleSubmit ( e ) }
76
+ onSubmit = { this . handleSubmit }
67
77
>
68
78
{ this . props . children }
69
79
</ form >
70
80
) ;
81
+ /* eslint-enable react/prop-types */
71
82
}
72
83
}
73
84
74
- Form . PropTypes = {
85
+ Form . propTypes = {
75
86
validators : PropTypes . object ,
76
87
validateOn : PropTypes . oneOf ( [
77
88
'change' ,
78
89
] ) ,
79
- model : PropTypes . string . isRequired
90
+ model : PropTypes . string . isRequired ,
91
+ onSubmit : PropTypes . func ,
80
92
} ;
81
93
82
94
export default connect ( identity ) ( Form ) ;
0 commit comments