UNPKG

anew

Version:

React and Redux Framework with additional power.

84 lines (64 loc) 3.12 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = createReducer; var _reduxPersist = require('redux-persist'); var _createPersistConfig = require('./createPersistConfig'); var _createPersistConfig2 = _interopRequireDefault(_createPersistConfig); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } function createReducer(anewStore, userReducer, persist) { var name = anewStore.name, initalState = anewStore.state; function reducer(reduxState) { var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, _ref$type = _ref.type, type = _ref$type === undefined ? '' : _ref$type, _ref$payload = _ref.payload, payload = _ref$payload === undefined ? [] : _ref$payload, _ref$state = _ref.state, globalState = _ref$state === undefined ? {} : _ref$state; var action = type.replace('@@', '').replace('/', ':').split(':'); var storeName = action[0]; var reducerName = action[1]; switch (storeName) { case '@@anew': switch (reducerName) { case 'RESET': anewStore.state = initalState; break; case 'BATCH': for (var i = 0, payloadLen = payload.length; i < payloadLen; i++) { reducer(reduxState, payload[i]); } break; } case 'persist': switch (reducerName) { case 'REHYDRATE': anewStore.setState(payload[name]); break; } default: var isStore = name === storeName; var currentReducer = isStore ? anewStore.reducers : anewStore.reducers[storeName]; if (!!currentReducer && typeof currentReducer[reducerName] === 'function') { return anewStore.setState(currentReducer[reducerName].apply(currentReducer, [anewStore.state].concat(_toConsumableArray(!isStore ? [globalState[storeName]].concat(_toConsumableArray(payload)) : payload)))); } break; } return anewStore.state; } var anewReducer = !userReducer ? reducer : function (state, action) { anewStore.setState(userReducer(anewStore.state, action)); return reducer(state, action); }; persist = (0, _createPersistConfig2.default)(persist, name); /** * Create a persistent reducer if persist config provided * @param { Object } persist Persist Config * @return { Function } Persistent Reducer */ return persist ? (0, _reduxPersist.persistReducer)(persist, anewReducer) : anewReducer; }