vue-easy-undoredo v0.1.2
Easy-UndoRedo is a very simple implementation of a typical undo redo stack for VueJS.
Installation
# Use npm
npm install vue-easy-undoredo --save
# Use yarn
yarn add vue-easy-undoredoDemo
https://codesandbox.io/s/easy-undoredo-demo-1t17q

Content of the library
Mixins
The library defines two mixins :
UndoRedoStackMixin: grafts an undo redo stack on any component that incorporates itUndoRedoClientMixin: provides easy access to the nearest component in the ancestor chain with an undo redo stack grafted onto it
Interfaces
The library defines one interface : Command.
Command interface
A command is an object that can be placed onto an undo redo stack for execution.
Commands simply updates (forward and backward) whatever data model drives the UI. Provided the data model is reactive, Vue will update the UI according to whatever modification the command applied to the model, as it usually does.
ALL modifications of the model must be done by using commands.
A command must implement three methods :
redo(first: boolean): void: Executed when the command is put initially onto the stack (in that case first = true) or when it must be played forward (in that case first = false).undo(): void: Executed when the command must be played backward.label() : string: Returns the label of the command if any.
UndoRedoStackMixin
An undo redo stack is actually two stacks :
- The stack of commands that can be undone (
undoStackdata of the UndoRedoStack mixin) The stack of commands that can be redone (
redoStackdata of the UndoRedoStack mixin)
Methods
execute(command: Command): void: executes the given command, puts it on theundoStackand flushes theredoStackundo(): void: calls undo on the command on top of theundoStackand moves it to theredoStackredo(): void: calls redo on the command on top of theredoStackand moves it to theundoStackreset() : void: flushes both stacksmarkSaved() : void: informs the stack that the data model has just been saved. See thedirtycomputed field for the usefulness of this.
Computed
canUndo : boolean: true if there are commands on theundoStackcanRedo : boolean: true if there are commands on theredoStackundoLabel : string: the label of the command on top of theundoStackredoLabel : string: the label of the command on top of theredoStackdirty : boolean: true if the model has unsaved changes given the current state of the stack
UndoRedoClientMixin
Simply provides one computed : undoRedoStack. Returns the nearest component in the ancestor chain with an undo redo stack grafted onto it.