redux-saga-thunk
Version:
Dispatching an action handled by redux-saga returns promise
150 lines (126 loc) • 5.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.done = exports.fulfilled = exports.rejected = exports.pending = exports.getDoneState = exports.getFulfilledState = exports.getRejectedState = exports.getPendingState = exports.getThunkState = exports.initialState = exports.DONE = exports.FULFILLED = exports.REJECTED = exports.PENDING = undefined;
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 _initialState;
var _find = require('lodash/find');
var _find2 = _interopRequireDefault(_find);
var _pick = require('lodash/pick');
var _pick2 = _interopRequireDefault(_pick);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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 PENDING = exports.PENDING = 'pending';
var REJECTED = exports.REJECTED = 'rejected';
var FULFILLED = exports.FULFILLED = 'fulfilled';
var DONE = exports.DONE = 'done';
var initialState = exports.initialState = (_initialState = {}, _defineProperty(_initialState, PENDING, {}), _defineProperty(_initialState, REJECTED, {}), _defineProperty(_initialState, FULFILLED, {}), _defineProperty(_initialState, DONE, {}), _initialState);
var getIn = function getIn(state, name, id) {
if (typeof name === 'undefined') {
return !!(0, _find2.default)(state, function (value) {
return !!value;
});
} else if (Array.isArray(name)) {
var names = name.map(function (n) {
return Array.isArray(n) ? n[0] : n;
});
var nameToIdMap = name.reduce(function (prev, curr) {
if (Array.isArray(curr)) {
return Object.assign({}, prev, _defineProperty({}, curr[0], curr[1]));
}
return prev;
}, {});
return !!(0, _find2.default)((0, _pick2.default)(state, names), function (value, key) {
if (typeof nameToIdMap[key] === 'undefined') {
return !!value;
}
return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' ? !!value[nameToIdMap[key]] : false;
});
} else if (Object.prototype.hasOwnProperty.call(state, name)) {
if (typeof id === 'undefined') {
return !!state[name];
}
return _typeof(state[name]) === 'object' ? !!state[name][id] : false;
}
return false;
};
var getThunkState = exports.getThunkState = function getThunkState() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (!Object.prototype.hasOwnProperty.call(state, 'thunk')) {
throw new Error('[redux-saga-thunk] There is no thunk state on reducer');
}
return state.thunk || {};
};
var getPendingState = exports.getPendingState = function getPendingState(state) {
return getThunkState(state)[PENDING] || initialState[PENDING];
};
var getRejectedState = exports.getRejectedState = function getRejectedState(state) {
return getThunkState(state)[REJECTED] || initialState[REJECTED];
};
var getFulfilledState = exports.getFulfilledState = function getFulfilledState(state) {
return getThunkState(state)[FULFILLED] || initialState[FULFILLED];
};
var getDoneState = exports.getDoneState = function getDoneState(state) {
return getThunkState(state)[DONE] || initialState[DONE];
};
/**
* Tells if an action is pending
* @example
* const mapStateToProps = state => ({
* fooIsPending: pending(state, 'FOO'),
* barForId42IsPending: pending(state, 'BAR', 42),
* barForAnyIdIsPending: pending(state, 'BAR'),
* fooOrBazIsPending: pending(state, ['FOO', 'BAZ']),
* fooOrBarForId42IsPending: pending(state, ['FOO', ['BAR', 42]]),
* anythingIsPending: pending(state)
* })
*/
var pending = exports.pending = function pending(state, name, id) {
return getIn(getPendingState(state), name, id);
};
/**
* Tells if an action was rejected
* @example
* const mapStateToProps = state => ({
* fooWasRejected: rejected(state, 'FOO'),
* barForId42WasRejected: rejected(state, 'BAR', 42),
* barForAnyIdWasRejected: rejected(state, 'BAR'),
* fooOrBazWasRejected: rejected(state, ['FOO', 'BAZ']),
* fooOrBarForId42WasRejected: rejected(state, ['FOO', ['BAR', 42]]),
* anythingWasRejected: rejected(state)
* })
*/
var rejected = exports.rejected = function rejected(state, name, id) {
return getIn(getRejectedState(state), name, id);
};
/**
* Tells if an action is fulfilled
* @example
* const mapStateToProps = state => ({
* fooIsFulfilled: fulfilled(state, 'FOO'),
* barForId42IsFulfilled: fulfilled(state, 'BAR', 42),
* barForAnyIdIsFulfilled: fulfilled(state, 'BAR'),
* fooOrBazIsFulfilled: fulfilled(state, ['FOO', 'BAZ']),
* fooOrBarForId42IsFulfilled: fulfilled(state, ['FOO', ['BAR', 42]]),
* anythingIsFulfilled: fulfilled(state)
* })
*/
var fulfilled = exports.fulfilled = function fulfilled(state, name, id) {
return getIn(getFulfilledState(state), name, id);
};
/**
* Tells if an action is done
* @example
* const mapStateToProps = state => ({
* fooIsDone: done(state, 'FOO'),
* barForId42IsDone: done(state, 'BAR', 42),
* barForAnyIdIsDone: done(state, 'BAR'),
* fooOrBazIsDone: done(state, ['FOO', 'BAZ']),
* fooOrBarForId42IsDone: done(state, ['FOO', ['BAR', 42]]),
* anythingIsDone: done(state)
* })
*/
var done = exports.done = function done(state, name, id) {
return getIn(getDoneState(state), name, id);
};