bdn-pocket
Version:
pocket tools for managing redux and redux-saga
59 lines (38 loc) • 1.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _has = require('ramda/src/has');
var _has2 = _interopRequireDefault(_has);
var _path = require('ramda/src/path');
var _path2 = _interopRequireDefault(_path);
var _assocPath = require('ramda/src/assocPath');
var _assocPath2 = _interopRequireDefault(_assocPath);
var _dissocPath = require('ramda/src/dissocPath');
var _dissocPath2 = _interopRequireDefault(_dissocPath);
var _make_reducer = require('./make_reducer');
var _make_reducer2 = _interopRequireDefault(_make_reducer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function ensureArray(v) {
return Array.isArray(v) ? v : [v];
}
var DELETE_KEY = {
del: 'my key'
};
function makePathReducer(messenger, pathGetter) {
var defaultState = messenger.defaultState;
var subReducer = (0, _make_reducer2.default)(messenger);
var reducers = messenger.reducers;
var reducer = function reducer() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState;
var action = arguments[1];
if (!(0, _has2.default)(action.type, reducers)) return state;
var pathArr = ensureArray(pathGetter(action));
var subState = (0, _path2.default)(pathArr, state);
var newSubState = subReducer(subState, action);
return newSubState === DELETE_KEY ? (0, _dissocPath2.default)(pathArr, state) : (0, _assocPath2.default)(pathArr, newSubState, state);
};
return reducer;
}
makePathReducer.DELETE_KEY = DELETE_KEY;
exports.default = makePathReducer;