From 56e74239d6b34df8f30ef046f0b0ff4ff0866a71 Mon Sep 17 00:00:00 2001
From: =Corey Hulen <corey@hulen.com>
Date: Sun, 14 Jun 2015 23:53:32 -0800
Subject: first commit

---
 web/react/stores/post_store.jsx | 224 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 224 insertions(+)
 create mode 100644 web/react/stores/post_store.jsx

(limited to 'web/react/stores/post_store.jsx')

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;
-- 
cgit v1.2.3-1-g7c22

