summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2015-08-10 12:31:51 -0400
committerChristopher Speller <crspeller@gmail.com>2015-08-10 12:31:51 -0400
commite1009fa7fb3a344f8164837e939692aa4b7b3054 (patch)
treefcfaf3546f655b161ec2cd511024551d5568f726
parent6eb76a7cc3081aa10889c3379813c76b14f60338 (diff)
parent96fc2a455283217013e00dd1461550ccc7b057f6 (diff)
downloadchat-e1009fa7fb3a344f8164837e939692aa4b7b3054.tar.gz
chat-e1009fa7fb3a344f8164837e939692aa4b7b3054.tar.bz2
chat-e1009fa7fb3a344f8164837e939692aa4b7b3054.zip
Merge pull request #348 from nickago/MM-1550
Mm 1550 Mentions are no longer removed from auto complete once used
-rw-r--r--web/react/components/mention_list.jsx17
-rw-r--r--web/react/components/textbox.jsx161
-rw-r--r--web/react/stores/post_store.jsx354
3 files changed, 233 insertions, 299 deletions
diff --git a/web/react/components/mention_list.jsx b/web/react/components/mention_list.jsx
index 5f1bb6d0e..f562cfb29 100644
--- a/web/react/components/mention_list.jsx
+++ b/web/react/components/mention_list.jsx
@@ -81,7 +81,7 @@ module.exports = React.createClass({
this.setState({selectedMention: 0, selectedUsername: ''});
}
},
- onListenerChange: function(id, mentionText, excludeList) {
+ onListenerChange: function(id, mentionText) {
if (id !== this.props.id) {
return;
}
@@ -90,9 +90,6 @@ module.exports = React.createClass({
if (mentionText != null) {
newState.mentionText = mentionText;
}
- if (excludeList != null) {
- newState.excludeUsers = excludeList;
- }
this.setState(newState);
},
@@ -149,15 +146,6 @@ module.exports = React.createClass({
scrollTop: scrollAmount
}, 75);
},
- alreadyMentioned: function(username) {
- var excludeUsers = this.state.excludeUsers;
- for (var i = 0; i < excludeUsers.length; i++) {
- if (excludeUsers[i] === username) {
- return true;
- }
- }
- return false;
- },
getInitialState: function() {
return {excludeUsers: [], mentionText: '-1', selectedMention: 0, selectedUsername: ''};
},
@@ -201,9 +189,6 @@ module.exports = React.createClass({
var index = 0;
for (var i = 0; i < users.length && index < MAX_ITEMS_IN_LIST; i++) {
- if (this.alreadyMentioned(users[i].username)) {
- continue;
- }
if ((users[i].first_name && users[i].first_name.lastIndexOf(mentionText, 0) === 0) ||
(users[i].last_name && users[i].last_name.lastIndexOf(mentionText, 0) === 0) ||
users[i].username.lastIndexOf(mentionText, 0) === 0) {
diff --git a/web/react/components/textbox.jsx b/web/react/components/textbox.jsx
index bbd1f84b6..b5c5cc564 100644
--- a/web/react/components/textbox.jsx
+++ b/web/react/components/textbox.jsx
@@ -2,11 +2,7 @@
// See License.txt for license information.
var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
-var UserStore = require('../stores/user_store.jsx');
var PostStore = require('../stores/post_store.jsx');
-var SocketStore = require('../stores/socket_store.jsx');
-var MsgTyping = require('./msg_typing.jsx');
-var MentionList = require('./mention_list.jsx');
var CommandList = require('./command_list.jsx');
var ErrorStore = require('../stores/error_store.jsx');
var AsyncClient = require('../utils/async_client.jsx');
@@ -19,53 +15,53 @@ function getStateFromStores() {
var error = ErrorStore.getLastError();
if (error) {
- return { message: error.message };
- } else {
- return { message: null };
+ return {message: error.message};
}
+ return {message: null};
}
module.exports = React.createClass({
+ displayName: 'Textbox',
caret: -1,
addedMention: false,
doProcessMentions: false,
mentions: [],
componentDidMount: function() {
- PostStore.addAddMentionListener(this._onChange);
- ErrorStore.addChangeListener(this._onError);
+ PostStore.addAddMentionListener(this.onListenerChange);
+ ErrorStore.addChangeListener(this.onRecievedError);
this.resize();
- this.processMentions();
+ this.updateMentionTab(null);
},
componentWillUnmount: function() {
- PostStore.removeAddMentionListener(this._onChange);
- ErrorStore.removeChangeListener(this._onError);
+ PostStore.removeAddMentionListener(this.onListenerChange);
+ ErrorStore.removeChangeListener(this.onRecievedError);
},
- _onChange: function(id, username) {
- if (id !== this.props.id) return;
- this.addMention(username);
+ onListenerChange: function(id, username) {
+ if (id === this.props.id) {
+ this.addMention(username);
+ }
},
- _onError: function() {
+ onRecievedError: function() {
var errorState = getStateFromStores();
if (this.state.timerInterrupt != null) {
window.clearInterval(this.state.timerInterrupt);
- this.setState({ timerInterrupt: null });
+ this.setState({timerInterrupt: null});
}
- if (errorState.message === "There appears to be a problem with your internet connection") {
- this.setState({ connection: "bad-connection" });
- var timerInterrupt = window.setInterval(this._onTimerInterrupt, 5000);
- this.setState({ timerInterrupt: timerInterrupt });
- }
- else {
- this.setState({ connection: "" });
+ if (errorState.message === 'There appears to be a problem with your internet connection') {
+ this.setState({connection: 'bad-connection'});
+ var timerInterrupt = window.setInterval(this.onTimerInterrupt, 5000);
+ this.setState({timerInterrupt: timerInterrupt});
+ } else {
+ this.setState({connection: ''});
}
},
- _onTimerInterrupt: function() {
+ onTimerInterrupt: function() {
//Since these should only happen when you have no connection and slightly briefly after any
//performance hit should not matter
- if (this.state.connection === "bad-connection") {
+ if (this.state.connection === 'bad-connection') {
AppDispatcher.handleServerAction({
type: ActionTypes.RECIEVED_ERROR,
err: null
@@ -75,15 +71,15 @@ module.exports = React.createClass({
}
window.clearInterval(this.state.timerInterrupt);
- this.setState({ timerInterrupt: null });
+ this.setState({timerInterrupt: null});
},
componentDidUpdate: function() {
if (this.caret >= 0) {
- utils.setCaretPosition(this.refs.message.getDOMNode(), this.caret)
+ utils.setCaretPosition(this.refs.message.getDOMNode(), this.caret);
this.caret = -1;
}
if (this.doProcessMentions) {
- this.processMentions();
+ this.updateMentionTab(null);
this.doProcessMentions = false;
}
this.resize();
@@ -93,7 +89,7 @@ module.exports = React.createClass({
this.checkForNewMention(nextProps.messageText);
}
var text = this.refs.message.getDOMNode().value;
- if (nextProps.channelId != this.props.channelId || nextProps.messageText !== text) {
+ if (nextProps.channelId !== this.props.channelId || nextProps.messageText !== text) {
this.doProcessMentions = true;
}
this.addedMention = false;
@@ -101,17 +97,17 @@ module.exports = React.createClass({
this.resize();
},
getInitialState: function() {
- return { mentionText: '-1', mentions: [], connection: "", timerInterrupt: null };
+ return {mentionText: '-1', mentions: [], connection: '', timerInterrupt: null};
},
- updateMentionTab: function(mentionText, excludeList) {
+ updateMentionTab: function(mentionText) {
var self = this;
+
// using setTimeout so dispatch isn't called during an in progress dispatch
setTimeout(function() {
AppDispatcher.handleViewAction({
type: ActionTypes.RECIEVED_MENTION_DATA,
id: self.props.id,
- mention_text: mentionText,
- exclude_list: excludeList
+ mention_text: mentionText
});
}, 1);
},
@@ -122,13 +118,13 @@ module.exports = React.createClass({
handleKeyPress: function(e) {
var text = this.refs.message.getDOMNode().value;
- if (!this.refs.commands.isEmpty() && text.indexOf("/") == 0 && e.which==13) {
+ if (!this.refs.commands.isEmpty() && text.indexOf('/') === 0 && e.which === 13) {
this.refs.commands.addFirstCommand();
e.preventDefault();
return;
}
- if ( !this.doProcessMentions) {
+ if (!this.doProcessMentions) {
var caret = utils.getCaretPosition(this.refs.message.getDOMNode());
var preText = text.substring(0, caret);
var lastSpace = preText.lastIndexOf(' ');
@@ -150,13 +146,15 @@ module.exports = React.createClass({
this.handleBackspace(e);
}
},
- handleBackspace: function(e) {
+ handleBackspace: function() {
var text = this.refs.message.getDOMNode().value;
- if (text.indexOf("/") == 0) {
- this.refs.commands.getSuggestedCommands(text.substring(0, text.length-1));
+ if (text.indexOf('/') === 0) {
+ this.refs.commands.getSuggestedCommands(text.substring(0, text.length - 1));
}
- if (this.doProcessMentions) return;
+ if (this.doProcessMentions) {
+ return;
+ }
var caret = utils.getCaretPosition(this.refs.message.getDOMNode());
var preText = text.substring(0, caret);
@@ -167,57 +165,6 @@ module.exports = React.createClass({
this.doProcessMentions = true;
}
},
- processMentions: function() {
- /* First, find all the possible mentions and add
- them all to a list of mentions */
- var text = utils.insertHtmlEntities(this.refs.message.getDOMNode().value);
-
- var profileMap = UserStore.getProfilesUsernameMap();
-
- var re1 = /@([a-z0-9_]+)( |$|\n)/gi;
-
- var matches = text.match(re1);
-
- if (!matches) {
- this.updateMentionTab(null, []);
- return;
- }
-
- var mentions = [];
- for (var i = 0; i < matches.length; i++) {
- var m = matches[i].substring(1,matches[i].length).trim();
- if ((m in profileMap && mentions.indexOf(m) === -1) || Constants.SPECIAL_MENTIONS.indexOf(m) !== -1) {
- mentions.push(m);
- }
- }
-
- /* Figure out what the user is currently typing. If it's a mention then we don't
- want to add it to the mention list yet, so we remove it if
- there is only one occurence of that mention so far. */
- var caret = utils.getCaretPosition(this.refs.message.getDOMNode());
-
- var text = this.props.messageText;
-
- var preText = text.substring(0, caret);
-
- var atIndex = preText.lastIndexOf('@');
- var spaceIndex = preText.lastIndexOf(' ');
- var newLineIndex = preText.lastIndexOf('\n');
-
- var typingMention = "";
- if (atIndex > spaceIndex && atIndex > newLineIndex) {
-
- typingMention = text.substring(atIndex+1, caret);
- }
-
- var re2 = new RegExp('@' + typingMention + '( |$|\n)', 'g');
-
- if ((text.match(re2) || []).length === 1 && mentions.indexOf(typingMention) !== -1) {
- mentions.splice(mentions.indexOf(typingMention), 1);
- }
-
- this.updateMentionTab(null, mentions);
- },
checkForNewMention: function(text) {
var caret = utils.getCaretPosition(this.refs.message.getDOMNode());
@@ -227,7 +174,7 @@ module.exports = React.createClass({
// The @ character not typed, so nothing to do.
if (atIndex === -1) {
- this.updateMentionTab('-1', null);
+ this.updateMentionTab('-1');
return;
}
@@ -236,13 +183,13 @@ module.exports = React.createClass({
// If there is a space after the last @, nothing to do.
if (lastSpace > atIndex || lastCharSpace > atIndex) {
- this.updateMentionTab('-1', null);
+ this.updateMentionTab('-1');
return;
}
// Get the name typed so far.
- var name = preText.substring(atIndex+1, preText.length).toLowerCase();
- this.updateMentionTab(name, null);
+ var name = preText.substring(atIndex + 1, preText.length).toLowerCase();
+ this.updateMentionTab(name);
},
addMention: function(name) {
var caret = utils.getCaretPosition(this.refs.message.getDOMNode());
@@ -264,7 +211,7 @@ module.exports = React.createClass({
this.addedMention = true;
this.doProcessMentions = true;
- this.props.onUserInput(prefix + "@" + name + " " + suffix);
+ this.props.onUserInput(prefix + '@' + name + ' ' + suffix);
},
addCommand: function(cmd) {
var elm = this.refs.message.getDOMNode();
@@ -275,22 +222,26 @@ module.exports = React.createClass({
var e = this.refs.message.getDOMNode();
var w = this.refs.wrapper.getDOMNode();
- var lht = parseInt($(e).css('lineHeight'),10);
+ var lht = parseInt($(e).css('lineHeight'), 10);
var lines = e.scrollHeight / lht;
- var mod = lines < 2.5 || this.props.messageText === "" ? 30 : 15;
+ var mod = 15;
+
+ if (lines < 2.5 || this.props.messageText === '') {
+ mod = 30;
+ }
if (e.scrollHeight - mod < 167) {
- $(e).css({'height':'auto','overflow-y':'hidden'}).height(e.scrollHeight - mod);
- $(w).css({'height':'auto'}).height(e.scrollHeight+2);
+ $(e).css({height: 'auto', 'overflow-y': 'hidden'}).height(e.scrollHeight - mod);
+ $(w).css({height: 'auto'}).height(e.scrollHeight + 2);
} else {
- $(e).css({'height':'auto','overflow-y':'scroll'}).height(167);
- $(w).css({'height':'auto'}).height(167);
+ $(e).css({height: 'auto', 'overflow-y': 'scroll'}).height(167);
+ $(w).css({height: 'auto'}).height(167);
}
},
handleFocus: function() {
var elm = this.refs.message.getDOMNode();
if (elm.title === elm.value) {
- elm.value = "";
+ elm.value = '';
}
},
handleBlur: function() {
@@ -304,9 +255,9 @@ module.exports = React.createClass({
},
render: function() {
return (
- <div ref="wrapper" className="textarea-wrapper">
+ <div ref='wrapper' className='textarea-wrapper'>
<CommandList ref='commands' addCommand={this.addCommand} channelId={this.props.channelId} />
- <textarea id={this.props.id} ref="message" className={"form-control custom-textarea " + this.state.connection} spellCheck="true" autoComplete="off" autoCorrect="off" rows="1" placeholder={this.props.createMessage} value={this.props.messageText} onInput={this.handleChange} onChange={this.handleChange} onKeyPress={this.handleKeyPress} onKeyDown={this.handleKeyDown} onFocus={this.handleFocus} onBlur={this.handleBlur} onPaste={this.handlePaste} />
+ <textarea id={this.props.id} ref='message' className={'form-control custom-textarea ' + this.state.connection} spellCheck='true' autoComplete='off' autoCorrect='off' rows='1' placeholder={this.props.createMessage} value={this.props.messageText} onInput={this.handleChange} onChange={this.handleChange} onKeyPress={this.handleKeyPress} onKeyDown={this.handleKeyDown} onFocus={this.handleFocus} onBlur={this.handleBlur} onPaste={this.handlePaste} />
</div>
);
}
diff --git a/web/react/stores/post_store.jsx b/web/react/stores/post_store.jsx
index ecf54ede6..ea1e75ecb 100644
--- a/web/react/stores/post_store.jsx
+++ b/web/react/stores/post_store.jsx
@@ -6,7 +6,6 @@ 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 BrowserStore = require('../stores/browser_store.jsx');
var Constants = require('../utils/constants.jsx');
@@ -21,185 +20,184 @@ 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) {
- BrowserStore.setItem("posts_" + channelId, posts);
- },
- getPosts: function(channelId) {
- return BrowserStore.getItem("posts_" + channelId);
- },
- storeSearchResults: function(results, is_mention_search) {
- BrowserStore.setItem("search_results", results);
- is_mention_search = is_mention_search ? true : false; // force to bool
- BrowserStore.setItem("is_mention_search", is_mention_search);
- },
- getSearchResults: function() {
- return BrowserStore.getItem("search_results");
- },
- getIsMentionSearch: function() {
- return BrowserStore.getItem("is_mention_search");
- },
- storeSelectedPost: function(post_list) {
- BrowserStore.setItem("select_post", post_list);
- },
- getSelectedPost: function() {
- return BrowserStore.getItem("select_post");
- },
- storeSearchTerm: function(term) {
- BrowserStore.setItem("search_term", term);
- },
- getSearchTerm: function() {
- return BrowserStore.getItem("search_term");
- },
- storeCurrentDraft: function(draft) {
- var channel_id = ChannelStore.getCurrentId();
- BrowserStore.setItem("draft_" + channel_id, draft);
- },
- getCurrentDraft: function() {
- var channel_id = ChannelStore.getCurrentId();
- return BrowserStore.getItem("draft_" + channel_id);
- },
- storeDraft: function(channel_id, draft) {
- BrowserStore.setItem("draft_" + channel_id, draft);
- },
- getDraft: function(channel_id) {
- return BrowserStore.getItem("draft_" + channel_id);
- },
- storeCommentDraft: function(parent_post_id, draft) {
- BrowserStore.setItem("comment_draft_" + parent_post_id, draft);
- },
- getCommentDraft: function(parent_post_id) {
- return BrowserStore.getItem("comment_draft_" + parent_post_id);
- },
- clearDraftUploads: function() {
- BrowserStore.actionOnItemsWithPrefix("draft_", function (key, value) {
- if (value) {
- value.uploadsInProgress = 0;
- BrowserStore.setItem(key, value);
- }
- });
- },
- clearCommentDraftUploads: function() {
- BrowserStore.actionOnItemsWithPrefix("comment_draft_", function (key, value) {
- if (value) {
- value.uploadsInProgress = 0;
- BrowserStore.setItem(key, value);
- }
- });
- }
+ emitChange: function emitChange() {
+ this.emit(CHANGE_EVENT);
+ },
+
+ addChangeListener: function addChangeListener(callback) {
+ this.on(CHANGE_EVENT, callback);
+ },
+
+ removeChangeListener: function removeChangeListener(callback) {
+ this.removeListener(CHANGE_EVENT, callback);
+ },
+
+ emitSearchChange: function emitSearchChange() {
+ this.emit(SEARCH_CHANGE_EVENT);
+ },
+
+ addSearchChangeListener: function addSearchChangeListener(callback) {
+ this.on(SEARCH_CHANGE_EVENT, callback);
+ },
+
+ removeSearchChangeListener: function removeSearchChangeListener(callback) {
+ this.removeListener(SEARCH_CHANGE_EVENT, callback);
+ },
+
+ emitSearchTermChange: function emitSearchTermChange(doSearch, isMentionSearch) {
+ this.emit(SEARCH_TERM_CHANGE_EVENT, doSearch, isMentionSearch);
+ },
+
+ addSearchTermChangeListener: function addSearchTermChangeListener(callback) {
+ this.on(SEARCH_TERM_CHANGE_EVENT, callback);
+ },
+
+ removeSearchTermChangeListener: function removeSearchTermChangeListener(callback) {
+ this.removeListener(SEARCH_TERM_CHANGE_EVENT, callback);
+ },
+
+ emitSelectedPostChange: function emitSelectedPostChange(fromSearch) {
+ this.emit(SELECTED_POST_CHANGE_EVENT, fromSearch);
+ },
+
+ addSelectedPostChangeListener: function addSelectedPostChangeListener(callback) {
+ this.on(SELECTED_POST_CHANGE_EVENT, callback);
+ },
+
+ removeSelectedPostChangeListener: function removeSelectedPostChangeListener(callback) {
+ this.removeListener(SELECTED_POST_CHANGE_EVENT, callback);
+ },
+
+ emitMentionDataChange: function emitMentionDataChange(id, mentionText) {
+ this.emit(MENTION_DATA_CHANGE_EVENT, id, mentionText);
+ },
+
+ addMentionDataChangeListener: function addMentionDataChangeListener(callback) {
+ this.on(MENTION_DATA_CHANGE_EVENT, callback);
+ },
+
+ removeMentionDataChangeListener: function removeMentionDataChangeListener(callback) {
+ this.removeListener(MENTION_DATA_CHANGE_EVENT, callback);
+ },
+
+ emitAddMention: function emitAddMention(id, username) {
+ this.emit(ADD_MENTION_EVENT, id, username);
+ },
+
+ addAddMentionListener: function addAddMentionListener(callback) {
+ this.on(ADD_MENTION_EVENT, callback);
+ },
+
+ removeAddMentionListener: function removeAddMentionListener(callback) {
+ this.removeListener(ADD_MENTION_EVENT, callback);
+ },
+
+ getCurrentPosts: function getCurrentPosts() {
+ var currentId = ChannelStore.getCurrentId();
+
+ if (currentId != null) {
+ return this.getPosts(currentId);
+ }
+ return null;
+ },
+ storePosts: function storePosts(channelId, posts) {
+ this.pStorePosts(channelId, posts);
+ this.emitChange();
+ },
+ pStorePosts: function pStorePosts(channelId, posts) {
+ BrowserStore.setItem('posts_' + channelId, posts);
+ },
+ getPosts: function getPosts(channelId) {
+ return BrowserStore.getItem('posts_' + channelId);
+ },
+ storeSearchResults: function storeSearchResults(results, isMentionSearch) {
+ BrowserStore.setItem('search_results', results);
+ BrowserStore.setItem('is_mention_search', Boolean(isMentionSearch));
+ },
+ getSearchResults: function getSearchResults() {
+ return BrowserStore.getItem('search_results');
+ },
+ getIsMentionSearch: function getIsMentionSearch() {
+ return BrowserStore.getItem('is_mention_search');
+ },
+ storeSelectedPost: function storeSelectedPost(postList) {
+ BrowserStore.setItem('select_post', postList);
+ },
+ getSelectedPost: function getSelectedPost() {
+ return BrowserStore.getItem('select_post');
+ },
+ storeSearchTerm: function storeSearchTerm(term) {
+ BrowserStore.setItem('search_term', term);
+ },
+ getSearchTerm: function getSearchTerm() {
+ return BrowserStore.getItem('search_term');
+ },
+ storeCurrentDraft: function storeCurrentDraft(draft) {
+ var channelId = ChannelStore.getCurrentId();
+ BrowserStore.setItem('draft_' + channelId, draft);
+ },
+ getCurrentDraft: function getCurrentDraft() {
+ var channelId = ChannelStore.getCurrentId();
+ return BrowserStore.getItem('draft_' + channelId);
+ },
+ storeDraft: function storeDraft(channelId, draft) {
+ BrowserStore.setItem('draft_' + channelId, draft);
+ },
+ getDraft: function getDraft(channelId) {
+ return BrowserStore.getItem('draft_' + channelId);
+ },
+ storeCommentDraft: function storeCommentDraft(parentPostId, draft) {
+ BrowserStore.setItem('comment_draft_' + parentPostId, draft);
+ },
+ getCommentDraft: function getCommentDraft(parentPostId) {
+ return BrowserStore.getItem('comment_draft_' + parentPostId);
+ },
+ clearDraftUploads: function clearDraftUploads() {
+ BrowserStore.actionOnItemsWithPrefix('draft_', function clearUploads(key, value) {
+ if (value) {
+ value.uploadsInProgress = 0;
+ BrowserStore.setItem(key, value);
+ }
+ });
+ },
+ clearCommentDraftUploads: function clearCommentDraftUploads() {
+ BrowserStore.actionOnItemsWithPrefix('comment_draft_', function clearUploads(key, value) {
+ if (value) {
+ value.uploadsInProgress = 0;
+ BrowserStore.setItem(key, value);
+ }
+ });
+ }
});
-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:
- }
+PostStore.dispatchToken = AppDispatcher.register(function registry(payload) {
+ var action = payload.action;
+
+ switch (action.type) {
+ case ActionTypes.RECIEVED_POSTS:
+ PostStore.pStorePosts(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);
+ break;
+ case ActionTypes.RECIEVED_ADD_MENTION:
+ PostStore.emitAddMention(action.id, action.username);
+ break;
+ default:
+ }
});
module.exports = PostStore;