Skip to content

Commit

Permalink
more pre-processing in createAction (#210)
Browse files Browse the repository at this point in the history
  • Loading branch information
Lucretiel authored and yangmillstheory committed May 10, 2017
1 parent feb9386 commit c87508b
Showing 1 changed file with 14 additions and 16 deletions.
30 changes: 14 additions & 16 deletions src/createAction.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import identity from 'lodash/identity';
import isFunction from 'lodash/isFunction';
import isUndefined from 'lodash/isUndefined';
import isNull from 'lodash/isNull';
import invariant from 'invariant';

Expand All @@ -10,35 +9,34 @@ export default function createAction(type, payloadCreator = identity, metaCreato
'Expected payloadCreator to be a function, undefined or null'
);

const finalPayloadCreator = isNull(payloadCreator)
const finalPayloadCreator = isNull(payloadCreator) || payloadCreator === identity
? identity
: payloadCreator;
: (head, ...args) => (head instanceof Error
? head : payloadCreator(head, ...args));

const actionCreator = (...args) => {
const hasError = args[0] instanceof Error;
const hasMeta = isFunction(metaCreator);
const typeString = type.toString();

const action = {
type
};
const actionCreator = (...args) => {
const payload = finalPayloadCreator(...args);
const action = { type };

const payload = hasError ? args[0] : finalPayloadCreator(...args);
if (!isUndefined(payload)) {
action.payload = payload;
if (payload instanceof Error) {
action.error = true;
}

if (hasError || payload instanceof Error) {
// Handle FSA errors where the payload is an Error object. Set error.
action.error = true;
if (payload !== undefined) {
action.payload = payload;
}

if (isFunction(metaCreator)) {
if (hasMeta) {
action.meta = metaCreator(...args);
}

return action;
};

actionCreator.toString = () => type.toString();
actionCreator.toString = () => typeString;

return actionCreator;
}

0 comments on commit c87508b

Please sign in to comment.