UNPKG

ola-toolkit

Version:

ola 开发工具套件

121 lines (86 loc) 3.5 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.initialState = undefined; exports.createBasicReducer = createBasicReducer; exports.createExtensibleReducer = createExtensibleReducer; var _immutable = require('immutable'); var _immutable2 = _interopRequireDefault(_immutable); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var initialState = exports.initialState = (0, _immutable.Map)({ loaded: false, loading: false, error: null, payload: (0, _immutable.Map)({ page: (0, _immutable.Map)() }) }); /** * 创建简单Reducer * @param actionNames * @returns {Function} */ function createBasicReducer(actionNames) { return function () { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; switch (action.type) { case actionNames.fetch: return state.set('loaded', false).set('loading', true); case actionNames.success: case actionNames.update: return state.set('loading', false).set('loaded', true).set('error', null).set('payload', action.payload); case actionNames.fail: return state.set('loading', false).set('loaded', false).set('error', action.payload).set('payload', initialState.get('payload')); case actionNames.clear: return state.set('loading', false).set('loaded', false).set('error', null).set('payload', initialState.get('payload')); default: return state; } }; } /** * 创建可扩展数据的 Reducer * @param keys * @param actionNames * @returns {Function} * * @example * makeExtensibleReducer([{ key: 'topicList', type: Array }], ...); */ function createExtensibleReducer(actionNames) { var keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; return function () { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; switch (action.type) { case actionNames.fetch: return state.set('loading', true); case actionNames.success: var payload = action.payload; keys.forEach(function (key) { var toBeExtend = state.get('payload').get(key); if (_immutable.List.isList(payload.get(key))) { toBeExtend = toBeExtend || (0, _immutable.List)(); payload = payload.set(key, toBeExtend.concat(payload.get(key))); } else if (_immutable.Map.isMap(payload.get(key))) { toBeExtend = toBeExtend || (0, _immutable.Map)(); payload = payload.set(key, toBeExtend.merge(payload.get(key))); } }); return state.set('loading', false).set('loaded', true).set('error', null).set('payload', payload); case actionNames.update: return state.set('loading', false).set('loaded', true).set('error', null).set('payload', action.payload); case actionNames.fail: return state.set('loading', false).set('loaded', false).set('error', action.get('error')).set('payload', action.get('payload')); case actionNames.clear: return state.set('loading', false).set('loaded', false).set('payload', initialState.get('payload')).set('error', null); default: return state; } }; }