UNPKG

dva-toolkit

Version:

A great dva typescript support toolkit inspired by @redux/toolkit

109 lines (89 loc) 2.3 kB
'use strict'; 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