Last active
August 29, 2015 14:08
-
-
Save jim-y/0c3a3c80088426ee5073 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
| 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; | |
| }); |
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
| 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> | |
| ); | |
| } | |
| }); |
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
| // =========================================== | |
| // ================= 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