UNPKG

redux-undo-actions

Version:

Redux middleware for undo/redo actions by dispatching reverting action

71 lines (61 loc) 2.73 kB
'use strict'; 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;