Skip to content

Instantly share code, notes, and snippets.

@ustun
Created February 25, 2015 14:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ustun/137767e38191c56166ea to your computer and use it in GitHub Desktop.
Save ustun/137767e38191c56166ea to your computer and use it in GitHub Desktop.
/*global Immutable*/
var raw_urls = _.range(1, 5).map(function (i) {
return {id: i, url: "url.com" + i, title: "Title of " + i, content: "Content of " + i};});
var some_map = _.object(_.map(raw_urls, function(item) {
return [item.id, item];
}));
var state = Immutable.fromJS({
urls: some_map,
pageNo: 1,
showDetail: false,
chosenUrlId: null,
canUndo: false
});
var undoStack = [];
var freezeState = function () {
return JSON.stringify(state);
};
var pushToUndoStack = function () {
if (undoStack.length == 0 || ! Immutable.is(state, undoStack[undoStack.length-1])) {
var oldState = state;
undoStack.push(oldState);
}
if (undoStack.length > 1) {
setStateBang({'canUndo': true}, true);
}
};
pushToUndoStack();
var undo = function () {
var previousState = undoStack.pop();
if (previousState) {
window.setStateBang(previousState, true);
} else {
window.setStateBang({canUndo: false}, true);
}
};
var setStateBang = function (keyOrObject, dontSaveToUndoStack) {
// Pass either a key-value or an object
if (!dontSaveToUndoStack) {
pushToUndoStack();
}
state = state.merge(Immutable.fromJS(keyOrObject));
window.renderTopLevel();
}
/** @jsx React.DOM */
var renderTopLevel = function () {
var stateAsJS = state.toJS();
React.renderComponent(
<OuterContainer
urls={stateAsJS.urls} pageNo={stateAsJS.pageNo}
showDetail={stateAsJS.showDetail}
canUndo={stateAsJS.canUndo}
chosenUrlId={stateAsJS.chosenUrlId}/>,
document.body
);
};
window.renderTopLevel();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment