anew
Version:
React and Redux Framework with additional power.
84 lines (64 loc) • 3.12 kB
JavaScript
;
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;
}