Skip to content

Instantly share code, notes, and snippets.

@kadamwhite
Created March 22, 2016 14:57
Show Gist options
  • Save kadamwhite/01f4d50fdf5a8452a7ab to your computer and use it in GitHub Desktop.
Save kadamwhite/01f4d50fdf5a8452a7ab to your computer and use it in GitHub Desktop.
{
"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"
}
}
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