redva-loading
Version:
Auto loading plugin for redva.
157 lines (125 loc) • 5.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _extends6 = require('babel-runtime/helpers/extends');
var _extends7 = _interopRequireDefault(_extends6);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var SHOW = '@@DVA_LOADING/SHOW';
var HIDE = '@@DVA_LOADING/HIDE';
var NAMESPACE = 'loading';
function createLoading() {
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var namespace = opts.namespace || NAMESPACE;
var _opts$only = opts.only,
only = _opts$only === undefined ? [] : _opts$only,
_opts$except = opts.except,
except = _opts$except === undefined ? [] : _opts$except;
if (only.length > 0 && except.length > 0) {
throw Error('It is ambiguous to configurate `only` and `except` items at the same time.');
}
var initialState = {
global: false,
models: {},
actions: {}
};
var extraReducers = (0, _defineProperty3.default)({}, namespace, function () {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
var _ref = arguments[1];
var type = _ref.type,
payload = _ref.payload;
var _ref2 = payload || {},
namespace = _ref2.namespace,
actionType = _ref2.actionType;
var ret = void 0;
switch (type) {
case SHOW:
ret = (0, _extends7.default)({}, state, {
global: true,
models: (0, _extends7.default)({}, state.models, (0, _defineProperty3.default)({}, namespace, true)),
actions: (0, _extends7.default)({}, state.actions, (0, _defineProperty3.default)({}, actionType, true))
});
break;
case HIDE:
// eslint-disable-line
var actions = (0, _extends7.default)({}, state.actions, (0, _defineProperty3.default)({}, actionType, false));
var models = (0, _extends7.default)({}, state.models, (0, _defineProperty3.default)({}, namespace, (0, _keys2.default)(actions).some(function (actionType) {
var _namespace = actionType.split('/')[0];
if (_namespace !== namespace) return false;
return actions[actionType];
})));
var global = (0, _keys2.default)(models).some(function (namespace) {
return models[namespace];
});
ret = (0, _extends7.default)({}, state, {
global: global,
models: models,
actions: actions
});
break;
default:
ret = state;
break;
}
return ret;
});
function onAction(effect, model, actionType) {
var namespace = model.namespace;
if (only.length === 0 && except.length === 0 || only.length > 0 && only.indexOf(actionType) !== -1 || except.length > 0 && except.indexOf(actionType) === -1) {
return function () {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(action, _ref4) {
var dispatch = _ref4.dispatch;
var result,
_args = arguments;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_context.next = 3;
return dispatch({ type: SHOW, payload: { namespace: namespace, actionType: actionType } });
case 3:
_context.next = 5;
return effect.apply(undefined, _args);
case 5:
result = _context.sent;
_context.next = 8;
return dispatch({ type: HIDE, payload: { namespace: namespace, actionType: actionType } });
case 8:
return _context.abrupt('return', result);
case 11:
_context.prev = 11;
_context.t0 = _context['catch'](0);
_context.next = 15;
return dispatch({ type: HIDE, payload: { namespace: namespace, actionType: actionType } });
case 15:
throw _context.t0;
case 16:
case 'end':
return _context.stop();
}
}
}, _callee, this, [[0, 11]]);
}));
return function (_x3, _x4) {
return _ref3.apply(this, arguments);
};
}();
} else {
return effect;
}
}
return {
extraReducers: extraReducers,
onAction: onAction
};
}
exports.default = createLoading;