diff --git a/src/createAction.js b/src/createAction.js index a6f7f9f2..874064c9 100644 --- a/src/createAction.js +++ b/src/createAction.js @@ -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'; @@ -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; }