diff options
author | =Corey Hulen <corey@hulen.com> | 2015-06-14 23:53:32 -0800 |
---|---|---|
committer | =Corey Hulen <corey@hulen.com> | 2015-06-14 23:53:32 -0800 |
commit | cf7a05f80f68b5b1c8bcc0089679dd497cec2506 (patch) | |
tree | 70007378570a6962d7c175ca96af732b71aeb6da /web/react/stores/post_store.jsx | |
download | chat-cf7a05f80f68b5b1c8bcc0089679dd497cec2506.tar.gz chat-cf7a05f80f68b5b1c8bcc0089679dd497cec2506.tar.bz2 chat-cf7a05f80f68b5b1c8bcc0089679dd497cec2506.zip |
first commit
Diffstat (limited to 'web/react/stores/post_store.jsx')
-rw-r--r-- | web/react/stores/post_store.jsx | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/web/react/stores/post_store.jsx b/web/react/stores/post_store.jsx new file mode 100644 index 000000000..05479f444 --- /dev/null +++ b/web/react/stores/post_store.jsx @@ -0,0 +1,224 @@ +// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved. +// See License.txt for license information. + +var AppDispatcher = require('../dispatcher/app_dispatcher.jsx'); +var EventEmitter = require('events').EventEmitter; +var assign = require('object-assign'); + +var ChannelStore = require('../stores/channel_store.jsx'); +var UserStore = require('../stores/user_store.jsx'); + +var Constants = require('../utils/constants.jsx'); +var ActionTypes = Constants.ActionTypes; + +var CHANGE_EVENT = 'change'; +var SEARCH_CHANGE_EVENT = 'search_change'; +var SEARCH_TERM_CHANGE_EVENT = 'search_term_change'; +var SELECTED_POST_CHANGE_EVENT = 'selected_post_change'; +var MENTION_DATA_CHANGE_EVENT = 'mention_data_change'; +var ADD_MENTION_EVENT = 'add_mention'; + +var PostStore = assign({}, EventEmitter.prototype, { + + emitChange: function() { + this.emit(CHANGE_EVENT); + }, + + addChangeListener: function(callback) { + this.on(CHANGE_EVENT, callback); + }, + + removeChangeListener: function(callback) { + this.removeListener(CHANGE_EVENT, callback); + }, + + emitSearchChange: function() { + this.emit(SEARCH_CHANGE_EVENT); + }, + + addSearchChangeListener: function(callback) { + this.on(SEARCH_CHANGE_EVENT, callback); + }, + + removeSearchChangeListener: function(callback) { + this.removeListener(SEARCH_CHANGE_EVENT, callback); + }, + + emitSearchTermChange: function(doSearch, isMentionSearch) { + this.emit(SEARCH_TERM_CHANGE_EVENT, doSearch, isMentionSearch); + }, + + addSearchTermChangeListener: function(callback) { + this.on(SEARCH_TERM_CHANGE_EVENT, callback); + }, + + removeSearchTermChangeListener: function(callback) { + this.removeListener(SEARCH_TERM_CHANGE_EVENT, callback); + }, + + emitSelectedPostChange: function(from_search) { + this.emit(SELECTED_POST_CHANGE_EVENT, from_search); + }, + + addSelectedPostChangeListener: function(callback) { + this.on(SELECTED_POST_CHANGE_EVENT, callback); + }, + + removeSelectedPostChangeListener: function(callback) { + this.removeListener(SELECTED_POST_CHANGE_EVENT, callback); + }, + + emitMentionDataChange: function(id, mentionText, excludeList) { + this.emit(MENTION_DATA_CHANGE_EVENT, id, mentionText, excludeList); + }, + + addMentionDataChangeListener: function(callback) { + this.on(MENTION_DATA_CHANGE_EVENT, callback); + }, + + removeMentionDataChangeListener: function(callback) { + this.removeListener(MENTION_DATA_CHANGE_EVENT, callback); + }, + + emitAddMention: function(id, username) { + this.emit(ADD_MENTION_EVENT, id, username); + }, + + addAddMentionListener: function(callback) { + this.on(ADD_MENTION_EVENT, callback); + }, + + removeAddMentionListener: function(callback) { + this.removeListener(ADD_MENTION_EVENT, callback); + }, + + getCurrentPosts: function() { + var currentId = ChannelStore.getCurrentId(); + + if (currentId != null) + return this.getPosts(currentId); + else + return null; + }, + storePosts: function(channelId, posts) { + this._storePosts(channelId, posts); + this.emitChange(); + }, + _storePosts: function(channelId, posts) { + sessionStorage.setItem("posts_" + channelId, JSON.stringify(posts)); + }, + getPosts: function(channelId) { + var posts = null; + try { + posts = JSON.parse(sessionStorage.getItem("posts_" + channelId)); + } + catch (err) { + } + + return posts; + }, + storeSearchResults: function(results, is_mention_search) { + sessionStorage.setItem("search_results", JSON.stringify(results)); + is_mention_search = is_mention_search ? true : false; // force to bool + sessionStorage.setItem("is_mention_search", JSON.stringify(is_mention_search)); + }, + getSearchResults: function() { + var results = null; + try { + results = JSON.parse(sessionStorage.getItem("search_results")); + } + catch (err) { + } + + return results; + }, + getIsMentionSearch: function() { + var result = false; + try { + result = JSON.parse(sessionStorage.getItem("is_mention_search")); + } + catch (err) { + } + + return result; + }, + storeSelectedPost: function(post_list) { + sessionStorage.setItem("select_post", JSON.stringify(post_list)); + }, + getSelectedPost: function() { + var post_list = null; + try { + post_list = JSON.parse(sessionStorage.getItem("select_post")); + } + catch (err) { + } + + return post_list; + }, + storeSearchTerm: function(term) { + sessionStorage.setItem("search_term", term); + }, + getSearchTerm: function() { + return sessionStorage.getItem("search_term"); + }, + storeCurrentDraft: function(draft) { + var channel_id = ChannelStore.getCurrentId(); + var user_id = UserStore.getCurrentId(); + localStorage.setItem("draft_" + channel_id + "_" + user_id, JSON.stringify(draft)); + }, + getCurrentDraft: function() { + var channel_id = ChannelStore.getCurrentId(); + var user_id = UserStore.getCurrentId(); + return JSON.parse(localStorage.getItem("draft_" + channel_id + "_" + user_id)); + }, + storeDraft: function(channel_id, user_id, draft) { + localStorage.setItem("draft_" + channel_id + "_" + user_id, JSON.stringify(draft)); + }, + getDraft: function(channel_id, user_id) { + return JSON.parse(localStorage.getItem("draft_" + channel_id + "_" + user_id)); + }, + clearDraftUploads: function() { + for (key in localStorage) { + if (key.substring(0,6) === "draft_") { + var d = JSON.parse(localStorage.getItem(key)); + if (d) { + d['uploadsInProgress'] = 0; + localStorage.setItem(key, JSON.stringify(d)); + } + } + } + } +}); + +PostStore.dispatchToken = AppDispatcher.register(function(payload) { + var action = payload.action; + + switch(action.type) { + case ActionTypes.RECIEVED_POSTS: + PostStore._storePosts(action.id, action.post_list); + PostStore.emitChange(); + break; + case ActionTypes.RECIEVED_SEARCH: + PostStore.storeSearchResults(action.results, action.is_mention_search); + PostStore.emitSearchChange(); + break; + case ActionTypes.RECIEVED_SEARCH_TERM: + PostStore.storeSearchTerm(action.term); + PostStore.emitSearchTermChange(action.do_search, action.is_mention_search); + break; + case ActionTypes.RECIEVED_POST_SELECTED: + PostStore.storeSelectedPost(action.post_list); + PostStore.emitSelectedPostChange(action.from_search); + break; + case ActionTypes.RECIEVED_MENTION_DATA: + PostStore.emitMentionDataChange(action.id, action.mention_text, action.exclude_list); + break; + case ActionTypes.RECIEVED_ADD_MENTION: + PostStore.emitAddMention(action.id, action.username); + break; + + default: + } +}); + +module.exports = PostStore; |