Skip to content

Commit

Permalink
merging #3171
Browse files Browse the repository at this point in the history
  • Loading branch information
erikras committed Jul 11, 2017
2 parents 3c530db + 15cd7e8 commit b8fc831
Show file tree
Hide file tree
Showing 4 changed files with 4 additions and 44 deletions.
1 change: 0 additions & 1 deletion examples/asyncValidation/src/AsyncValidation.md
Expand Up @@ -43,4 +43,3 @@ browser to view the example running locally on your machine.
## How to use the form below:

* Usernames that will _fail_ validation: `john`, `paul`, `george` or `ringo`.
* Company names that will _fail_ validation: `google`, `amazon` or `tesla`.
8 changes: 1 addition & 7 deletions examples/asyncValidation/src/AsyncValidationForm.js
Expand Up @@ -33,12 +33,6 @@ const AsyncValidationForm = props => {
component={renderField}
label="Username"
/>
<Field
name="companyname"
type="text"
component={renderField}
label="Companyname"
/>
<Field
name="password"
type="password"
Expand All @@ -61,5 +55,5 @@ export default reduxForm({
form: 'asyncValidation', // a unique identifier for this form
validate,
asyncValidate,
asyncBlurFields: ['username', 'companyname']
asyncBlurFields: ['username']
})(AsyncValidationForm)
25 changes: 1 addition & 24 deletions examples/asyncValidation/src/asyncValidate.js
@@ -1,35 +1,12 @@
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))

function composeAsyncValidators(validatorFns) {
return async (values, dispatch, props, field) => {
const validatorFn = validatorFns[field]
await validatorFn(values, dispatch, props, field)
}
}

const usernameValidate = (values /*, dispatch */) => {
const asyncValidate = (values /*, dispatch */) => {
return sleep(1000).then(() => {
// simulate server latency
console.log('asyncValidate username')
if (['john', 'paul', 'george', 'ringo'].includes(values.username)) {
throw { username: 'That username is taken' }
}
})
}

const companynameValidate = (values /*, dispatch */) => {
return sleep(1000).then(() => {
// simulate server latency
console.log('asyncValidate companyname')
if (['google', 'amazon', 'tesla'].includes(values.companyname)) {
throw { companyname: 'That companyname is taken' }
}
})
}

const asyncValidate = composeAsyncValidators({
username: usernameValidate,
companyname: companynameValidate
})

export default asyncValidate
14 changes: 2 additions & 12 deletions src/createReducer.js
Expand Up @@ -379,18 +379,8 @@ function createReducer<M, L>(structure: Structure<M, L>) {
if (_error) {
result = setIn(result, 'error', _error)
}
const fields = Object.keys(fieldErrors)
if (fields.length) {
let asyncErrors =
getIn(result, 'asyncErrors') || /* if undefined */ fromJS({})
fields.forEach(field => {
asyncErrors = setIn(
asyncErrors,
`${field}`,
fromJS(fieldErrors[field])
)
})
result = setIn(result, 'asyncErrors', asyncErrors)
if (Object.keys(fieldErrors).length) {
result = setIn(result, 'asyncErrors', fromJS(fieldErrors))
}
} else {
result = deleteIn(result, 'error')
Expand Down

0 comments on commit b8fc831

Please sign in to comment.