@@ -3,6 +3,8 @@ import PropTypes from 'prop-types';
3
3
import autoBind from 'react-autobind' ;
4
4
import validationRules from './validationRules' ;
5
5
6
+ const DETACH_INPUT_TIMEOUT = 200 ;
7
+
6
8
export default class Form extends React . Component {
7
9
static validationRules = Object . assign ( { } , validationRules ) ;
8
10
@@ -19,6 +21,7 @@ export default class Form extends React.Component {
19
21
this . valid = false ;
20
22
this . validationQueue = [ ] ;
21
23
this . validating = false ;
24
+ this . detachInputTimer = null ;
22
25
23
26
autoBind ( this ) ;
24
27
}
@@ -47,9 +50,7 @@ export default class Form extends React.Component {
47
50
onSubmit ( event ) {
48
51
event . preventDefault ( ) ;
49
52
50
- for ( let input of this . inputs ) {
51
- input . touch ( ) ;
52
- }
53
+ this . touch ( ) ;
53
54
54
55
const valid = this . isValid ( ) ;
55
56
if ( this . props . onSubmit ) {
@@ -98,8 +99,9 @@ export default class Form extends React.Component {
98
99
}
99
100
100
101
detachInput ( input ) {
102
+ clearTimeout ( this . detachInputTimer ) ;
101
103
this . inputs . splice ( this . inputs . indexOf ( input ) , 1 ) ;
102
- this . validate ( ) ;
104
+ this . detachInputTimer = setTimeout ( this . validate , DETACH_INPUT_TIMEOUT ) ;
103
105
}
104
106
105
107
addToValidationQueue ( input ) {
@@ -190,6 +192,12 @@ export default class Form extends React.Component {
190
192
}
191
193
}
192
194
195
+ touch ( ) {
196
+ for ( let input of this . inputs ) {
197
+ input . touch ( ) ;
198
+ }
199
+ }
200
+
193
201
render ( ) {
194
202
const { children, className} = this . props ;
195
203
0 commit comments