redux-promise-middleware-actions
Version:
Redux action creator for making async actions with redux-promise-middleware
42 lines • 1.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.asyncReducer = exports.createReducer = exports.createHandlerMap = exports.getType = void 0;
var tslib_1 = require("tslib");
function getType(actionCreator) {
return actionCreator.toString();
}
exports.getType = getType;
function createHandlerMap(actionCreators, handler) {
return (Array.isArray(actionCreators) ? actionCreators : [actionCreators])
.map(getType)
.reduce(function (acc, type) {
acc[type] = handler;
return acc;
}, {});
}
exports.createHandlerMap = createHandlerMap;
function createReducer(defaultState, handlerMapsCreator) {
var handlerMap = Object.assign.apply(Object, tslib_1.__spreadArrays([{}], handlerMapsCreator(createHandlerMap)));
return function (state, action) {
if (state === void 0) { state = defaultState; }
var handler = handlerMap[action.type];
return handler ? handler(state, action) : state;
};
}
exports.createReducer = createReducer;
var asyncReducer = function (fn) {
var defaultState = {};
return createReducer(defaultState, function (handleAction) { return [
handleAction(fn.pending, function (state) { return (tslib_1.__assign(tslib_1.__assign({}, state), { pending: true })); }),
handleAction(fn.fulfilled, function (state, _a) {
var payload = _a.payload;
return (tslib_1.__assign(tslib_1.__assign({}, state), { pending: false, error: undefined, data: payload, date: Date.now() }));
}),
handleAction(fn.rejected, function (state, _a) {
var payload = _a.payload;
return (tslib_1.__assign(tslib_1.__assign({}, state), { pending: false, error: payload }));
}),
]; });
};
exports.asyncReducer = asyncReducer;
//# sourceMappingURL=reducers.js.map