Skip to content

Commit c87508b

Browse files
Lucretielyangmillstheory
authored andcommitted
more pre-processing in createAction (#210)
1 parent feb9386 commit c87508b

File tree

1 file changed

+14
-16
lines changed

1 file changed

+14
-16
lines changed

src/createAction.js

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import identity from 'lodash/identity';
22
import isFunction from 'lodash/isFunction';
3-
import isUndefined from 'lodash/isUndefined';
43
import isNull from 'lodash/isNull';
54
import 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

Comments
 (0)