redux-saga-thunk
Version:
Dispatching an action handled by redux-saga returns promise
83 lines (60 loc) • 3.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _utils = require('./utils');
var _selectors = require('./selectors');
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var transformSubstate = function transformSubstate(substate, path, value) {
var name = path[0];
var newValue = value;
if (path.length === 2) {
var id = path[1];
if (!value) {
newValue = _extends({}, substate[name]);
delete newValue[id];
} else {
newValue = _extends({}, substate[name], _defineProperty({}, id, true));
}
if (Object.keys(newValue).length === 0) {
newValue = false;
}
}
return _extends({}, substate, _defineProperty({}, name, newValue));
};
var omit = function omit(substate, path) {
var name = path[0];
if (path.length === 1) {
var newState = _extends({}, substate);
delete newState[name];
return newState;
}
if (_typeof(substate[name]) !== 'object') {
return substate;
}
return transformSubstate(substate, path, false);
};
var cleanState = function cleanState(state, path) {
var _extends4;
return _extends({}, state, (_extends4 = {}, _defineProperty(_extends4, _selectors.PENDING, omit(state[_selectors.PENDING], path)), _defineProperty(_extends4, _selectors.REJECTED, omit(state[_selectors.REJECTED], path)), _defineProperty(_extends4, _selectors.FULFILLED, omit(state[_selectors.FULFILLED], path)), _defineProperty(_extends4, _selectors.DONE, omit(state[_selectors.DONE], path)), _extends4));
};
var transformState = function transformState(state, path, pending, rejected, fulfilled, done) {
var _extends5;
return _extends({}, state, (_extends5 = {}, _defineProperty(_extends5, _selectors.PENDING, transformSubstate(state[_selectors.PENDING], path, pending)), _defineProperty(_extends5, _selectors.REJECTED, transformSubstate(state[_selectors.REJECTED], path, rejected)), _defineProperty(_extends5, _selectors.FULFILLED, transformSubstate(state[_selectors.FULFILLED], path, fulfilled)), _defineProperty(_extends5, _selectors.DONE, transformSubstate(state[_selectors.DONE], path, done)), _extends5));
};
exports.default = function () {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _selectors.initialState;
var action = arguments[1];
if (!(0, _utils.isThunkAction)(action)) return state;
var name = (0, _utils.getThunkName)(action);
var path = (0, _utils.hasId)(action) ? [name, (0, _utils.getThunkId)(action)] : [name];
if ((0, _utils.isCleanAction)(action)) return cleanState(state, path);
if ((0, _utils.isThunkRequestAction)(action)) {
return transformState(state, path, true, false, false, false);
} else if (action.error) {
return transformState(state, path, false, true, false, true);
}
return transformState(state, path, false, false, true, true);
};