redux-live-undo
Version:
A high-order reducer that enables generic undo/redo functionality without giving up live updates
49 lines (32 loc) • 1.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _lodash = require('lodash.isequal');
var _lodash2 = _interopRequireDefault(_lodash);
var _lodash3 = require('lodash.last');
var _lodash4 = _interopRequireDefault(_lodash3);
var _lodash5 = require('lodash.mapvalues');
var _lodash6 = _interopRequireDefault(_lodash5);
var _lodash7 = require('lodash.some');
var _lodash8 = _interopRequireDefault(_lodash7);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var DEFAULT_CHANGE_DETECTOR = function DEFAULT_CHANGE_DETECTOR(lastState, nextState) {
return !(0, _lodash2.default)(lastState, nextState);
};
var getNextState = function getNextState(reducers, state, action) {
var subValues = (0, _lodash6.default)(reducers, function (r, k) {
var nextState = r(state.present[k], action);
var changeDetector = r.changeDetector || DEFAULT_CHANGE_DETECTOR;
var lastState = (0, _lodash4.default)(state.past) ? (0, _lodash4.default)(state.past)[k] : undefined;
var changed = changeDetector(lastState, nextState);
return {
changed: changed,
nextState: nextState
};
});
var nextState = (0, _lodash6.default)(subValues, 'nextState');
var anyChanged = (0, _lodash8.default)((0, _lodash6.default)(subValues, 'changed'));
return { nextState: nextState, anyChanged: anyChanged };
};
exports.default = getNextState;