11import identity from 'lodash/identity' ;
22import isFunction from 'lodash/isFunction' ;
3- import isUndefined from 'lodash/isUndefined' ;
43import isNull from 'lodash/isNull' ;
54import invariant from 'invariant' ;
65
@@ -10,35 +9,34 @@ export default function createAction(type, payloadCreator = identity, metaCreato
109 'Expected payloadCreator to be a function, undefined or null'
1110 ) ;
1211
13- const finalPayloadCreator = isNull ( payloadCreator )
12+ const finalPayloadCreator = isNull ( payloadCreator ) || payloadCreator === identity
1413 ? identity
15- : payloadCreator ;
14+ : ( head , ...args ) => ( head instanceof Error
15+ ? head : payloadCreator ( head , ...args ) ) ;
1616
17- const actionCreator = ( ... args ) => {
18- const hasError = args [ 0 ] instanceof Error ;
17+ const hasMeta = isFunction ( metaCreator ) ;
18+ const typeString = type . toString ( ) ;
1919
20- const action = {
21- type
22- } ;
20+ const actionCreator = ( ... args ) => {
21+ const payload = finalPayloadCreator ( ... args ) ;
22+ const action = { type } ;
2323
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 ;
2726 }
2827
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 ;
3230 }
3331
34- if ( isFunction ( metaCreator ) ) {
32+ if ( hasMeta ) {
3533 action . meta = metaCreator ( ...args ) ;
3634 }
3735
3836 return action ;
3937 } ;
4038
41- actionCreator . toString = ( ) => type . toString ( ) ;
39+ actionCreator . toString = ( ) => typeString ;
4240
4341 return actionCreator ;
4442}
0 commit comments