Skip to content

Add option on top of redux-undo to linearize history (Emacs-style undo)

License

Notifications You must be signed in to change notification settings

DanielDe/redux-linear-undo

 
 

Repository files navigation

redux linear undo

This is a tiny extension of the redux-undo package that adds a linearizeHistory config option. Linearizing history allows you to "undo undos", giving you a completely linear history in which "future" states are never lost (this is Emacs-style undo) - if you keep pressing the undo button you'll be taken through the entire history of edits.

Example

Say we have a simple application that lets us increment, decrement, and print out a number. We start with 1 and increment it 4 times to get to 5. Now our past states look like this:

[1, 2, 3, 4]

If we then undo 2 times we get back to 3 and our past looks like this:

[1, 2]

and our future looks like this:

[4, 5]

Dispatching any action except for an undo will trigger a linearization of the history. So if we now print, our history will first be linearized to look like this:

[1, 2, 3, 4, 5, 4]

Now the next undo action will undo the previous undo, taking us back to 4 instead of 2.

Usage

The usage is the same as for redux-undo. Just pass the linearizeHistory configuration option.

// redux-undo higher-order reducer
import undoable from 'redux-undo';

combineReducers({
  counter: undoable(counter, { linearizeHistory: true })
});

Todo list

  • Honor the limit config option
  • Allow filtering of actions that trigger a linearization of history
  • Add tests :)

About

Add option on top of redux-undo to linearize history (Emacs-style undo)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%