redux-undo-actions
Version:
Redux middleware for undo/redo actions by dispatching reverting action
71 lines (61 loc) • 2.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.canRedo = exports.canUndo = exports.getFutureHistoryItem = exports.getPastHistoryItem = undefined;
var _types = require('./types');
var types = _interopRequireWildcard(_types);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
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); } }
var defaultState = {
past: [],
future: []
};
var undoHistory = function undoHistory() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState;
var action = arguments[1];
var past = state.past,
future = state.future;
switch (action.type) {
case types.HISTORY_UNDO:
return canUndo(state) ? {
past: past.slice(0, past.length - action.index),
future: [].concat(_toConsumableArray(past.slice(past.length - action.index, past.length)), _toConsumableArray(future))
} : state;
case types.HISTORY_REDO:
return canRedo(state) ? {
past: [].concat(_toConsumableArray(past), _toConsumableArray(future.slice(0, action.index))),
future: future.slice(action.index, future.length)
} : state;
case types.HISTORY_ADD:
return {
past: [].concat(_toConsumableArray(past), [{
action: action.action,
state: action.state
}]),
future: []
};
case types.HISTORY_CLEAR:
return {
past: [],
future: []
};
default:
return state;
}
};
var getPastHistoryItem = exports.getPastHistoryItem = function getPastHistoryItem(state) {
var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
return state.past[state.past.length - index];
};
var getFutureHistoryItem = exports.getFutureHistoryItem = function getFutureHistoryItem(state) {
var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
return state.future[index - 1];
};
var canUndo = exports.canUndo = function canUndo(state) {
return state.past.length > 0;
};
var canRedo = exports.canRedo = function canRedo(state) {
return state.future.length > 0;
};
exports.default = undoHistory;