UNPKG

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
'use strict'; 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;