@@ -254,6 +254,7 @@ const createManagerApi: CreateManagerApi = ({
254
254
let silentRender : string [ ] = [ ] ;
255
255
let runningValidators = 0 ;
256
256
let flatSubmitErrors : AnyObject = { } ;
257
+ let flatErrors : AnyObject = { } ;
257
258
258
259
function updateRunningValidators ( increment : number ) : void {
259
260
runningValidators = Math . max ( runningValidators + increment , 0 ) ;
@@ -460,6 +461,7 @@ const createManagerApi: CreateManagerApi = ({
460
461
if ( isPromise ( result ) ) {
461
462
const asyncResult = result as Promise < FormLevelError > ;
462
463
464
+ flatErrors = { } ;
463
465
state . errors = { } ;
464
466
state . hasValidationErrors = false ;
465
467
state . valid = true ;
@@ -480,14 +482,20 @@ const createManagerApi: CreateManagerApi = ({
480
482
state . valid = false ;
481
483
state . invalid = true ;
482
484
485
+ flatErrors = flatObject ( errors ) ;
486
+ Object . keys ( flatErrors ) . forEach ( ( name ) => {
487
+ handleFieldError ( name , false , flatErrors [ name ] ) ;
488
+ } ) ;
489
+
483
490
render ( ) ;
484
491
} ) ;
485
492
}
486
493
487
494
const syncError = result as FormLevelError | undefined ;
488
495
if ( syncError ) {
489
- Object . keys ( syncError ) . forEach ( ( name ) => {
490
- handleFieldError ( name , false , syncError [ name ] ) ;
496
+ flatErrors = flatObject ( syncError ) ;
497
+ Object . keys ( flatErrors ) . forEach ( ( name ) => {
498
+ handleFieldError ( name , false , flatErrors [ name ] ) ;
491
499
} ) ;
492
500
state . errors = syncError ;
493
501
state . hasValidationErrors = true ;
@@ -499,6 +507,7 @@ const createManagerApi: CreateManagerApi = ({
499
507
state . valid = true ;
500
508
state . invalid = false ;
501
509
state . error = undefined ;
510
+ flatErrors = { } ;
502
511
/**
503
512
* Fields have to be revalidated on field level to synchronize the form and field errors
504
513
*/
@@ -872,15 +881,17 @@ const createManagerApi: CreateManagerApi = ({
872
881
const render = prepareRerender ( ) ;
873
882
874
883
if ( error ) {
875
- state . errors [ name ] = error ;
884
+ set ( state . errors , name , error ) ;
885
+ flatErrors [ name ] = error ;
876
886
state . valid = false ;
877
887
state . invalid = true ;
878
888
state . hasValidationErrors = true ;
879
889
} else {
880
- delete state . errors [ name ] ;
890
+ set ( state . errors , name , undefined ) ;
891
+ delete flatErrors [ name ] ;
881
892
}
882
893
883
- if ( Object . keys ( state . errors ) . length === 0 ) {
894
+ if ( Object . keys ( flatErrors ) . length === 0 ) {
884
895
state . valid = true ;
885
896
state . invalid = false ;
886
897
state . hasValidationErrors = false ;
0 commit comments