ts-command-invoker
Version:
Command invoker for easy implementation of undo/redo
81 lines (54 loc) • 1.48 kB
Markdown
A simple command invoker, that can be used to implement undo/redo functionality (aka `Ctrl+Z` / `Ctrl+Shift+Z`).
## Installation
```npm i ts-command-invoker```
## Example usage
Command invoker can invoke commands and later undo or redo them. This can be useful for implementing classic undo/redo behavior such as the one you know from Google docs, etc.
```ts
import { Command, CommandInvoker } from 'ts-command-invoker';
let counter = 0;
export class AddOneCommand extends Command {
do(): void {
counter += 1;
}
undo(): void {
counter -= 1;
}
}
const invoker = new CommandInvoker();
invoker.invoke(new AddOneCommand());
// counter === 1
invoker.invoke(new AddOneCommand());
// counter === 2
invoker.undo()
// counter === 1
invoker.undo()
// counter === 0
invoker.redo()
// counter === 1
```
Multiple commands can be batched into one using `MultiCommand`.
```ts
import { Command, CommandInvoker, MultiCommand } from 'ts-command-invoker';
export class DeleteCommand extends Command {
do(): void {
// delete one item
}
undo(): void {
// bring back one item
}
}
const deleteMultiple = new MultiCommand([
new DeleteCommand(item1),
new DeleteCommand(item2),
]);
const invoker = new CommandInvoker();
invoker.invoke(deleteMultiple);
```
Feel free to use in any way. (ISC)
- v1.0.3
- Improved Usage example
- v1.0.0
- Command invoker implementation