redux-promise-middleware-actions
Version:
Redux action creator for making async actions with redux-promise-middleware
55 lines • 2.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createAsyncAction = exports.createAction = exports.onRejected = exports.onFulfilled = exports.onPending = void 0;
var tslib_1 = require("tslib");
var onPending = function (type, delimiter) {
if (delimiter === void 0) { delimiter = '_'; }
return "" + type + delimiter + "PENDING";
};
exports.onPending = onPending;
var onFulfilled = function (type, delimiter) {
if (delimiter === void 0) { delimiter = '_'; }
return "" + type + delimiter + "FULFILLED";
};
exports.onFulfilled = onFulfilled;
var onRejected = function (type, delimiter) {
if (delimiter === void 0) { delimiter = '_'; }
return "" + type + delimiter + "REJECTED";
};
exports.onRejected = onRejected;
/**
* Standard action creator factory.
* @param type Action type.
* @example
* const addTodo = createAction('TODO_ADD', (name) => ({ name }));
*/
function createAction(type, payloadCreator, metadataCreator) {
return Object.assign(function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return (tslib_1.__assign(tslib_1.__assign({ type: type }, (payloadCreator && { payload: payloadCreator.apply(void 0, args) })), (metadataCreator && { meta: metadataCreator.apply(void 0, args) })));
}, { toString: function () { return type; } });
}
exports.createAction = createAction;
/**
* Asynchronous action creator factory.
* @param type Action type.
* @example
* const getTodos = createAsyncAction('TODOS_GET', () => fetch('https://todos.com/todos'));
*/
function createAsyncAction(type, payloadCreator, metadataCreator, _a) {
var _b = _a === void 0 ? {} : _a, delimiter = _b.promiseTypeDelimiter;
return Object.assign(createAction(type, payloadCreator, metadataCreator), {
toString: function () {
throw new Error("Async action " + type + " must be handled with pending, fulfilled or rejected");
},
}, {
pending: createAction(exports.onPending(type, delimiter)),
fulfilled: createAction(exports.onFulfilled(type, delimiter), function (payload) { return payload; }),
rejected: createAction(exports.onRejected(type, delimiter), function (payload) { return payload; }),
});
}
exports.createAsyncAction = createAsyncAction;
//# sourceMappingURL=actions.js.map