dva-toolkit
Version:
A great dva typescript support toolkit inspired by @redux/toolkit
109 lines (89 loc) • 2.3 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
/**
* Better dva config function inspired by @redux/toolkit
*
* @param options same config as dva model but with strong type support
* @returns model for dva use and actions to be use directly
* @public
*/
function createDvaSlice(options) {
var namespace = options.namespace,
reducers = options.reducers,
effects = options.effects;
if (!namespace) {
throw new Error('`namespace` is a required option for createDvaSlice');
}
var actionCreators = _extends({}, createReducersActions(namespace, reducers), createEffectsActions(namespace, effects));
return {
model: options,
action: actionCreators,
initState: options.state
};
}
/**
* create reducers actions
*
* @private
*/
function createReducersActions(namespace, reducers) {
if (!reducers) return {};
var pureReducers = Array.isArray(reducers) ? reducers[0] : reducers;
return createActionsByKeys(namespace, Object.keys(pureReducers));
}
/**
* create effects actions
*
* @private
*/
function createEffectsActions(namespace, effects) {
if (!effects) return {};
return createActionsByKeys(namespace, Object.keys(effects));
}
/**
* create actions by namespace and function name
*
* @private
*/
function createActionsByKeys(namespace, keys) {
var actions = {};
keys.forEach(function (key) {
actions[key] = createAction(getType(namespace, key));
});
return actions;
}
/**
* create action
*
* @private
*/
var createAction = function createAction(type) {
return function (arg) {
return {
type: type,
payload: arg
};
};
};
/**
* generate type by namespace and function name
*/
function getType(slice, actionKey) {
return slice + "/" + actionKey;
}
exports.createDvaSlice = createDvaSlice;
//# sourceMappingURL=dva-toolkit.cjs.development.js.map
;