File tree Expand file tree Collapse file tree 2 files changed +37
-2
lines changed Expand file tree Collapse file tree 2 files changed +37
-2
lines changed Original file line number Diff line number Diff line change @@ -387,3 +387,35 @@ describe("complex test case", () => {
387
387
expect ( form . state ( ) . isValid ) . toBe ( true ) ;
388
388
} ) ;
389
389
} ) ;
390
+
391
+ describe ( "onFieldChange fn" , ( ) => {
392
+ const form = mount (
393
+ < Form
394
+ defaultFields = { fields }
395
+ renderer = { customRenderer }
396
+ showValidationBeforeTouched
397
+ />
398
+ ) ;
399
+ form . update ( ) ;
400
+
401
+ test ( 'should not update the field touch state when skipTouchState argument is set to true' , ( ) => {
402
+ //check initially state of name field for a freshly mounted form
403
+ let isNameFieldTouched = form . state ( ) . fields . find ( field => field . id === 'name' ) . touched ;
404
+ expect ( isNameFieldTouched ) . toBe ( false ) ;
405
+
406
+ let formFragment = form . find ( "FormFragment" ) . first ( ) ;
407
+ // update a name field through onFieldChange and provide skipTouchState argument
408
+ formFragment . prop ( "onFieldChange" ) ( 'name' , 'Some name' , true ) ;
409
+ form . update ( ) ;
410
+ isNameFieldTouched = form . state ( ) . fields . find ( field => field . id === 'name' ) . touched ;
411
+ expect ( isNameFieldTouched ) . toBe ( false ) ;
412
+
413
+ // update a name field through onFieldChange and without the skipTouchState argument
414
+ // touched should be subsequently set to true
415
+ formFragment . prop ( "onFieldChange" ) ( 'name' , 'Some name' ) ;
416
+ form . update ( ) ;
417
+ isNameFieldTouched = form . state ( ) . fields . find ( field => field . id === 'name' ) . touched ;
418
+ expect ( isNameFieldTouched ) . toBe ( true ) ;
419
+
420
+ } )
421
+ } ) ;
Original file line number Diff line number Diff line change @@ -147,7 +147,7 @@ export default class Form extends Component<
147
147
}
148
148
}
149
149
150
- onFieldChange ( id : string , value : Value ) {
150
+ onFieldChange ( id : string , value : Value , skipFieldTouched ) {
151
151
const {
152
152
optionsHandler,
153
153
validationHandler,
@@ -156,7 +156,10 @@ export default class Form extends Component<
156
156
disabled = false
157
157
} = this . props ;
158
158
let { fields } = this . state ;
159
- fields = updateFieldTouchedState ( id , true , fields ) ;
159
+
160
+ //skiping the field touch update here
161
+ if ( ! skipFieldTouched )
162
+ fields = updateFieldTouchedState ( id , true , fields ) ;
160
163
fields = updateFieldValue ( id , value , fields ) ;
161
164
const nextState = getNextStateFromFields ( {
162
165
fields,
You can’t perform that action at this time.
0 commit comments