You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

134 lines
3.9 KiB

import _regeneratorRuntime from '@babel/runtime/regenerator';
import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
import _objectSpread from '@babel/runtime/helpers/esm/objectSpread';
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 === void 0 ? [] : _opts$only,
_opts$except = opts.except,
except = _opts$except === void 0 ? [] : _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: {},
effects: {}
};
var extraReducers = _defineProperty({}, namespace, function () {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
var _ref = arguments.length > 1 ? arguments[1] : undefined,
type = _ref.type,
payload = _ref.payload;
var _ref2 = payload || {},
namespace = _ref2.namespace,
actionType = _ref2.actionType;
var ret;
switch (type) {
case SHOW:
ret = _objectSpread({}, state, {
global: true,
models: _objectSpread({}, state.models, _defineProperty({}, namespace, true)),
effects: _objectSpread({}, state.effects, _defineProperty({}, actionType, true))
});
break;
case HIDE:
{
var effects = _objectSpread({}, state.effects, _defineProperty({}, actionType, false));
var models = _objectSpread({}, state.models, _defineProperty({}, namespace, Object.keys(effects).some(function (actionType) {
var _namespace = actionType.split('/')[0];
if (_namespace !== namespace) return false;
return effects[actionType];
})));
var global = Object.keys(models).some(function (namespace) {
return models[namespace];
});
ret = _objectSpread({}, state, {
global: global,
models: models,
effects: effects
});
break;
}
default:
ret = state;
break;
}
return ret;
});
function onEffect(effect, _ref3, model, actionType) {
var put = _ref3.put;
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 (
/*#__PURE__*/
_regeneratorRuntime.mark(function _callee() {
var _args = arguments;
return _regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return put({
type: SHOW,
payload: {
namespace: namespace,
actionType: actionType
}
});
case 2:
_context.next = 4;
return effect.apply(void 0, _args);
case 4:
_context.next = 6;
return put({
type: HIDE,
payload: {
namespace: namespace,
actionType: actionType
}
});
case 6:
case "end":
return _context.stop();
}
}
}, _callee);
})
);
} else {
return effect;
}
}
return {
extraReducers: extraReducers,
onEffect: onEffect
};
}
export default createLoading;