(afterAsync: boolean)
| 469 | } |
| 470 | |
| 471 | const processErrors = (afterAsync: boolean) => { |
| 472 | let merged = { |
| 473 | ...(limitedFieldLevelValidation ? formState.errors : {}), |
| 474 | ...recordLevelErrors, |
| 475 | ...(afterAsync |
| 476 | ? asyncRecordLevelErrors // new async errors |
| 477 | : formState.asyncErrors), // previous async errors |
| 478 | }; |
| 479 | const forEachError = (fn: (name: string, error: any) => void) => { |
| 480 | fieldKeys.forEach((name) => { |
| 481 | if (fields[name]) { |
| 482 | // make sure field is still registered |
| 483 | // field-level errors take precedent over record-level errors |
| 484 | const recordLevelError = getIn(recordLevelErrors, name); |
| 485 | const asyncRecordLevelError = afterAsync ? getIn(asyncRecordLevelErrors, name) : undefined; |
| 486 | const errorFromParent = getIn(merged, name); |
| 487 | const hasFieldLevelValidation = getValidators(safeFields[name]) |
| 488 | .length; |
| 489 | const fieldLevelError = fieldLevelErrors[name]; |
| 490 | fn( |
| 491 | name, |
| 492 | (hasFieldLevelValidation && fieldLevelError) || |
| 493 | (validate && (asyncRecordLevelError || recordLevelError)) || |
| 494 | (!recordLevelError && !limitedFieldLevelValidation |
| 495 | ? errorFromParent |
| 496 | : undefined), |
| 497 | ); |
| 498 | } |
| 499 | }); |
| 500 | }; |
| 501 | forEachError((name, error) => { |
| 502 | merged = setIn(merged, name, error) || {}; |
| 503 | }); |
| 504 | forEachError((name, error) => { |
| 505 | if (error && error[ARRAY_ERROR]) { |
| 506 | const existing = getIn(merged, name); |
| 507 | const copy: any = [...existing]; |
| 508 | copy[ARRAY_ERROR] = error[ARRAY_ERROR]; |
| 509 | merged = setIn(merged, name, copy); |
| 510 | } |
| 511 | }); |
| 512 | if (!shallowEqual(formState.errors, merged)) { |
| 513 | formState.errors = merged; |
| 514 | } |
| 515 | if (afterAsync) { |
| 516 | formState.asyncErrors = asyncRecordLevelErrors; |
| 517 | } |
| 518 | formState.error = recordLevelErrors[FORM_ERROR]; |
| 519 | }; |
| 520 | |
| 521 | if (hasAsyncValidations) { |
| 522 | // async validations are running, ensure validating is true before notifying |
no test coverage detected
searching dependent graphs…