1 | "use strict";
|
2 |
|
3 | exports.__esModule = true;
|
4 | exports.default = createAction;
|
5 |
|
6 | var _invariant = _interopRequireDefault(require("invariant"));
|
7 |
|
8 | var _isFunction = _interopRequireDefault(require("./utils/isFunction"));
|
9 |
|
10 | var _identity = _interopRequireDefault(require("./utils/identity"));
|
11 |
|
12 | var _isNull = _interopRequireDefault(require("./utils/isNull"));
|
13 |
|
14 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
15 |
|
16 | function createAction(type, payloadCreator, metaCreator) {
|
17 | if (payloadCreator === void 0) {
|
18 | payloadCreator = _identity.default;
|
19 | }
|
20 |
|
21 | (0, _invariant.default)((0, _isFunction.default)(payloadCreator) || (0, _isNull.default)(payloadCreator), 'Expected payloadCreator to be a function, undefined or null');
|
22 | var finalPayloadCreator = (0, _isNull.default)(payloadCreator) || payloadCreator === _identity.default ? _identity.default : function (head) {
|
23 | for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
24 | args[_key - 1] = arguments[_key];
|
25 | }
|
26 |
|
27 | return head instanceof Error ? head : payloadCreator.apply(void 0, [head].concat(args));
|
28 | };
|
29 | var hasMeta = (0, _isFunction.default)(metaCreator);
|
30 | var typeString = type.toString();
|
31 |
|
32 | var actionCreator = function actionCreator() {
|
33 | var payload = finalPayloadCreator.apply(void 0, arguments);
|
34 | var action = {
|
35 | type: type
|
36 | };
|
37 |
|
38 | if (payload instanceof Error) {
|
39 | action.error = true;
|
40 | }
|
41 |
|
42 | if (payload !== undefined) {
|
43 | action.payload = payload;
|
44 | }
|
45 |
|
46 | if (hasMeta) {
|
47 | action.meta = metaCreator.apply(void 0, arguments);
|
48 | }
|
49 |
|
50 | return action;
|
51 | };
|
52 |
|
53 | actionCreator.toString = function () {
|
54 | return typeString;
|
55 | };
|
56 |
|
57 | return actionCreator;
|
58 | } |
\ | No newline at end of file |