UNPKG

redva-loading

Version:

Auto loading plugin for redva.

157 lines (125 loc) 5.12 kB
'use strict'; 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;