Skip to content

Instantly share code, notes, and snippets.

@jim-y
Last active August 29, 2015 14:08
Show Gist options
  • Select an option

  • Save jim-y/0c3a3c80088426ee5073 to your computer and use it in GitHub Desktop.

Select an option

Save jim-y/0c3a3c80088426ee5073 to your computer and use it in GitHub Desktop.
var STATE = {
books: new Backbone.Collection([], {
model: Models.BOOK_MODEL
}),
users: new Backbone.Collection([], {
model: Models.USER_MODEL
}),
categories: new Backbone.Collection([], {
model: Models.CATEGORY_MODEL
})
};
// ===========================================
// ================= METHODS =================
// ===========================================
function _processBookResults(dfd, snapshot) {
var bookModels,
BookCollection = Models.newCollection(Models.BOOK_MODEL);
bookModels = [].map.call(snapshot.val(), function(book) {
return Models.createNewBook(book);
});
STATE.books = new BookCollection(bookModels);
dfd.resolve();
}
function _processUserResults(dfd, snapshot) {
var userModels,
UserCollection = Models.newCollection(Models.USER_MODEL);
userModels = [].map.call(snapshot.val(), function (user) {
return Models.createNewUser(user);
});
STATE.users = new UserCollection(userModels);
dfd.resolve();
}
function _processCategoryResults(dfd, snapshot) {
var categoryModels,
CategoryCollection = Models.newCollection(Models.CATEGORY_MODEL);
categoryModels = [].map.call(snapshot.val(), function (category) {
return Models.createNewCategory(category);
});
STATE.categories = new CategoryCollection(categoryModels);
dfd.resolve();
}
function _loadBooks(dfd) {
REFS.BOOKS.once('value',
_processBookResults.bind(null, dfd),
_handleError.bind(null, dfd)
);
}
function _loadUsers(dfd) {
REFS.USERS.once('value',
_processUserResults.bind(null, dfd),
_handleError.bind(null, dfd)
);
}
function _loadCategories(dfd) {
REFS.CATEGORIES.once('value',
_processCategoryResults.bind(null, dfd),
_handleError.bind(null, dfd)
);
}
function _updateBooks(snapshot) {
var bookModels = [].map.call(snapshot.val(), function(book) {
return Models.createNewBook(book);
});
STATE.books.reset(bookModels);
LibraryStore.emitChange();
}
function _init() {
var loadBooksDeferred = new jQuery.Deferred(),
loadUsersDeferred = new jQuery.Deferred(),
loadCategoriesDeferred = new jQuery.Deferred(),
stateReadyDfd = new jQuery.Deferred(),
credentials = SessionStore.getState();
sessionStorage.setItem('username', credentials.userName);
_loadBooks(loadBooksDeferred);
_loadUsers(loadUsersDeferred);
_loadCategories(loadCategoriesDeferred);
jQuery
.when(loadBooksDeferred, loadUsersDeferred, loadCategoriesDeferred)
.then(stateReadyDfd.resolve, stateReadyDfd.reject);
return stateReadyDfd;
}
// ===========================================
// ================== STORE ==================
// ===========================================
LibraryStore = merge(EventEmitter.prototype, {
getAll: function() {
return STATE;
}
});
LibraryStore = merge(LibraryStore, StoreMixin);
// ============================================
// ================= REGISTER =================
// ============================================
LibraryStore.dispatchToken = AppDispatcher.register(function(payload) {
var action = payload.action;
switch(action.actionType) {
case Constants.INITIALIZE:
_init().done(function() {
LibraryStore.emitChange();
});
break;
default:
return true;
}
return true;
});
Login = React.createClass({
_handleSubmit: function () {
var inp = this.refs.login.getDOMNode();
Actions.updateCredentials(inp.value);
inp.value = '';
},
render: function () {
return (
<span className="input-group-btn">
<button className="btn btn-default" type="button" onClick={this._handleSubmit} >
Login
</button>
</span>
);
}
});
// ===========================================
// ================= METHODS =================
// ===========================================
function _setState(settings, cb) {
STATE.loggedIn = settings.loggedIn;
STATE.userName = settings.userName;
cb();
}
function _handleResult(userName, snapshot) {
var validUser,
users;
users = [].filter.call(snapshot.val(), function(user) {
return user.login === userName;
});
validUser = users.length > 0;
if (validUser) {
_setState({
loggedIn: true,
userName: userName
}, Actions.initialize);
}
}
function _updateCredentials(userName) {
REFS.USERS.once('value', _handleResult.bind(null, userName));
}
// ===========================================
// ================== STORE ==================
// ===========================================
SessionStore = merge(EventEmitter.prototype, {
getState: function() {
return STATE;
}
});
SessionStore = merge(SessionStore, StoreMixin);
// ============================================
// ================= REGISTER =================
// ============================================
SessionStore.dispatchToken = AppDispatcher.register(function(payload) {
var action = payload.action;
switch (action.actionType) {
case Constants.UPDATE_CREDENTIALS:
_updateCredentials(action.userName);
break;
default:
return true;
}
return true;
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment