/**
* Undo/redo context
* @typedef {Object} UndoRedoContext
* @property {Array<Model>} stack=[] List of processed models.
* @property {Number} currentPosition=-1 Current model index into the stack.
* @property {Number} maxSize Max size of the stack.
* @property {Boolean} canUndo=false
* @property {Boolean} canRedo=false
*/
/**
* Create a new undo/redo context
* @param {Configuration} configuration Current configuration
* @return {UndoRedoContext} New undo/redo context
*/
export function createUndoRedoContext (configuration) {
return {
stack: [],
currentPosition: -1,
maxSize: configuration.undoRedoMaxStackSize,
canUndo: false,
canRedo: false
}
}
/**
* Update the undo/redo state
* @param {UndoRedoContext} undoRedoContext Current undo/redo context
* @return {UndoRedoContext} Updated undo/redo context
*/
export function updateUndoRedoState (undoRedoContext) {
const undoRedoContextRef = undoRedoContext
undoRedoContextRef.canUndo = undoRedoContext.currentPosition > 0
undoRedoContextRef.canRedo = undoRedoContext.currentPosition < (undoRedoContext.stack.length - 1)
return undoRedoContextRef
}