simple-undo-redo
Version:
Simple undo-redo functionality with branching support for JavaScript applications
104 lines (78 loc) • 2.48 kB
Markdown
# simple-undo-redo
Simple undo-redo functionality with branching support for JavaScript applications.
## Features
- ✅ Simple undo/redo operations
- ✅ Git-like branching system
- ✅ React hook included
- ✅ LocalStorage support
- ✅ Zero dependencies
- ✅ Works in browser and Node.js
## Installation
```bash
npm install simple-undo-redo
```
## Quick Start
```javascript
const UndoRedoJS = require('simple-undo-redo');
// Create instance
const undoRedo = new UndoRedoJS({ count: 0 });
// Update data
undoRedo.update({ count: 1 }, 'Increment count');
undoRedo.update({ count: 2 }, 'Increment again');
// Undo/Redo
undoRedo.undo(); // Back to count: 1
undoRedo.redo(); // Forward to count: 2
// Get current data
console.log(undoRedo.getCurrentData()); // { count: 2 }
```
## React Usage
```javascript
const { useUndoRedo } = require('simple-undo-redo');
function MyComponent() {
const { data, updateData, undo, redo, canUndo, canRedo } = useUndoRedo({ count: 0 });
return (
<div>
<p>Count: {data.count}</p>
<button onClick={() => updateData({ count: data.count + 1 })}>+</button>
<button onClick={undo} disabled={!canUndo}>Undo</button>
<button onClick={redo} disabled={!canRedo}>Redo</button>
</div>
);
}
```
## Branching
```javascript
// Create branch
undoRedo.createBranch('feature');
undoRedo.switchBranch('feature');
// Make changes in branch
undoRedo.update({ count: 10 }, 'Feature changes');
// Switch back and merge
undoRedo.switchBranch('main');
undoRedo.mergeBranch('feature');
```
## API
### Constructor
```javascript
const undoRedo = new UndoRedoJS(initialData, {
maxSize: 50, // Maximum history size
enableStorage: false, // Enable localStorage
storageKey: 'undo-redo' // localStorage key
});
```
### Methods
| Method | Description |
|--------|-------------|
| `update(data, message)` | Update data with optional message |
| `undo()` | Go back one step |
| `redo()` | Go forward one step |
| `getCurrentData()` | Get current data |
| `canUndo()` | Check if undo is possible |
| `canRedo()` | Check if redo is possible |
| `createBranch(name)` | Create new branch |
| `switchBranch(name)` | Switch to branch |
| `mergeBranch(name)` | Merge branch into current |
| `getHistory()` | Get history of current branch |
| `clear()` | Clear all data and history |
## License
MIT