1
1
import identity from 'lodash/identity' ;
2
2
import isFunction from 'lodash/isFunction' ;
3
- import isUndefined from 'lodash/isUndefined' ;
4
3
import isNull from 'lodash/isNull' ;
5
4
import invariant from 'invariant' ;
6
5
@@ -10,35 +9,34 @@ export default function createAction(type, payloadCreator = identity, metaCreato
10
9
'Expected payloadCreator to be a function, undefined or null'
11
10
) ;
12
11
13
- const finalPayloadCreator = isNull ( payloadCreator )
12
+ const finalPayloadCreator = isNull ( payloadCreator ) || payloadCreator === identity
14
13
? identity
15
- : payloadCreator ;
14
+ : ( head , ...args ) => ( head instanceof Error
15
+ ? head : payloadCreator ( head , ...args ) ) ;
16
16
17
- const actionCreator = ( ... args ) => {
18
- const hasError = args [ 0 ] instanceof Error ;
17
+ const hasMeta = isFunction ( metaCreator ) ;
18
+ const typeString = type . toString ( ) ;
19
19
20
- const action = {
21
- type
22
- } ;
20
+ const actionCreator = ( ... args ) => {
21
+ const payload = finalPayloadCreator ( ... args ) ;
22
+ const action = { type } ;
23
23
24
- const payload = hasError ? args [ 0 ] : finalPayloadCreator ( ...args ) ;
25
- if ( ! isUndefined ( payload ) ) {
26
- action . payload = payload ;
24
+ if ( payload instanceof Error ) {
25
+ action . error = true ;
27
26
}
28
27
29
- if ( hasError || payload instanceof Error ) {
30
- // Handle FSA errors where the payload is an Error object. Set error.
31
- action . error = true ;
28
+ if ( payload !== undefined ) {
29
+ action . payload = payload ;
32
30
}
33
31
34
- if ( isFunction ( metaCreator ) ) {
32
+ if ( hasMeta ) {
35
33
action . meta = metaCreator ( ...args ) ;
36
34
}
37
35
38
36
return action ;
39
37
} ;
40
38
41
- actionCreator . toString = ( ) => type . toString ( ) ;
39
+ actionCreator . toString = ( ) => typeString ;
42
40
43
41
return actionCreator ;
44
42
}
0 commit comments