Created
March 22, 2016 14:57
-
-
Save kadamwhite/01f4d50fdf5a8452a7ab to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "temp", | |
"version": "1.0.0", | |
"description": "", | |
"main": "undo-redo-demo.js", | |
"author": "", | |
"license": "MIT", | |
"scripts": { | |
"start": "node undo-redo-demo" | |
}, | |
"devDependencies": { | |
"immutable": "^3.7.6", | |
"redux": "^3.3.1", | |
"redux-undo": "^0.6.1" | |
}, | |
"dependencies": { | |
"redux-immutable": "^3.0.6" | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var redux = require('redux'); | |
var createStore = redux.createStore; | |
var Immutable = require('immutable'); | |
var undoable = require('redux-undo').default; | |
var undo = require('redux-undo').ActionCreators.undo; | |
var redo = require('redux-undo').ActionCreators.redo; | |
function reducer(state, action) { | |
if (typeof state === 'undefined') { | |
return Immutable.Map(); | |
} | |
switch ( action.type ) { | |
case 'ADD_VALUE': | |
return state.set(action.key, action.value); | |
case 'REMOVE_VALUE': | |
return state.set(action.key, null); | |
default: | |
return state; | |
} | |
} | |
// var combineReducers = require('redux').combineReducers; | |
var combineReducers = require('redux-immutable').combineReducers; | |
var rootReducer = combineReducers({ | |
obj: undoable(reducer) | |
}); | |
var store = createStore(rootReducer); | |
store.subscribe(function() { | |
console.log(store.getState().get('obj')); | |
}); | |
var letters = 'abcdefghijklmnopqrstuvwxyz '; | |
function letter() { | |
var index = Math.floor( Math.random() * 27 ); | |
return Math.random() > 0.5 ? | |
letters[index].toUpperCase() : | |
letters[index]; | |
} | |
function arrOfLength(len) { | |
var arr = []; | |
for (var i = 0; i < len; i++) { | |
arr.push(null); | |
} | |
return arr; | |
} | |
function addItem() { | |
var val = arrOfLength(10).map(letter).join(''); | |
return { | |
type: 'ADD_VALUE', | |
value: val, | |
key: letter() | |
}; | |
} | |
function removeItem() { | |
var val = (new Array(10)).map(letter); | |
return { | |
type: 'ADD_VALUE', | |
key: letter() | |
}; | |
} | |
console.log(letter()); | |
console.log(addItem()); | |
store.dispatch(addItem()); | |
store.dispatch(addItem()); | |
store.dispatch(undo()); | |
store.dispatch(redo()); | |
store.dispatch(redo()); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment