UNPKG

redux-saga-thunk

Version:

Dispatching an action handled by redux-saga returns promise

150 lines (126 loc) 5.7 kB
'use strict'; 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); };