summaryrefslogtreecommitdiffstats
path: root/webapp
diff options
context:
space:
mode:
authorYi EungJun <semtlenori@gmail.com>2016-09-20 06:41:19 +0900
committerHarrison Healey <harrisonmhealey@gmail.com>2016-09-19 17:41:19 -0400
commitbb69e98631b2541954b6ae465b8ba5f788b9dc49 (patch)
tree125fac51e896af3b254825a029653d86395f9d2b /webapp
parent80b2ce9c3f88f96a1972232607544d347f54fff7 (diff)
downloadchat-bb69e98631b2541954b6ae465b8ba5f788b9dc49.tar.gz
chat-bb69e98631b2541954b6ae465b8ba5f788b9dc49.tar.bz2
chat-bb69e98631b2541954b6ae465b8ba5f788b9dc49.zip
PLT-4182 Fix incorrect listing for at-mention in comment (#4031)
* Add missing eol * PLT-4182 Fix incorrect listing for at-mention in comment Suggestion box for at-mention listed users for the center channel even if the current textbox is for reply for a post which belongs to a different channel.
Diffstat (limited to 'webapp')
-rw-r--r--webapp/components/create_comment.jsx3
-rw-r--r--webapp/components/suggestion/at_mention_provider.jsx20
-rw-r--r--webapp/components/textbox.jsx18
3 files changed, 32 insertions, 9 deletions
diff --git a/webapp/components/create_comment.jsx b/webapp/components/create_comment.jsx
index 0e4a7d7e6..2f0698510 100644
--- a/webapp/components/create_comment.jsx
+++ b/webapp/components/create_comment.jsx
@@ -400,6 +400,7 @@ export default class CreateComment extends React.Component {
createMessage={Utils.localizeMessage('create_comment.addComment', 'Add a comment...')}
initialText=''
supportsCommands={false}
+ channelId={this.props.channelId}
id='reply_textbox'
ref='textbox'
/>
@@ -444,4 +445,4 @@ export default class CreateComment extends React.Component {
CreateComment.propTypes = {
channelId: React.PropTypes.string.isRequired,
rootId: React.PropTypes.string.isRequired
-}; \ No newline at end of file
+};
diff --git a/webapp/components/suggestion/at_mention_provider.jsx b/webapp/components/suggestion/at_mention_provider.jsx
index 248e459b5..9998e6357 100644
--- a/webapp/components/suggestion/at_mention_provider.jsx
+++ b/webapp/components/suggestion/at_mention_provider.jsx
@@ -126,6 +126,10 @@ function filterUsersByPrefix(users, prefix, limit, type) {
}
export default class AtMentionProvider {
+ constructor(channelId) {
+ this.channelId = channelId;
+ }
+
handlePretextChanged(suggestionId, pretext) {
const captured = (/@([a-z0-9\-\._]*)$/i).exec(pretext.toLowerCase());
if (captured) {
@@ -134,15 +138,17 @@ export default class AtMentionProvider {
// Group users into members and nonmembers of the channel.
const users = UserStore.getActiveOnlyProfiles(true);
const channelMembers = {};
- const extra = ChannelStore.getCurrentExtraInfo();
- for (let i = 0; i < extra.members.length; i++) {
- const id = extra.members[i].id;
- if (users[id]) {
- channelMembers[id] = users[id];
- Reflect.deleteProperty(users, id);
+ const channelNonmembers = users;
+ if (this.channelId != null) {
+ const extraInfo = ChannelStore.getExtraInfo(this.channelId);
+ for (let i = 0; i < extraInfo.members.length; i++) {
+ const id = extraInfo.members[i].id;
+ if (users[id]) {
+ channelMembers[id] = users[id];
+ Reflect.deleteProperty(channelNonmembers, id);
+ }
}
}
- const channelNonmembers = users;
// Filter users by prefix.
const filteredMembers = filterUsersByPrefix(
diff --git a/webapp/components/textbox.jsx b/webapp/components/textbox.jsx
index 5c1d823b5..22738ffa3 100644
--- a/webapp/components/textbox.jsx
+++ b/webapp/components/textbox.jsx
@@ -36,7 +36,11 @@ export default class Textbox extends React.Component {
connection: ''
};
- this.suggestionProviders = [new AtMentionProvider(), new ChannelMentionProvider(), new EmoticonProvider()];
+ this.suggestionProviders = [
+ new AtMentionProvider(this.props.channelId),
+ new ChannelMentionProvider(),
+ new EmoticonProvider()
+ ];
if (props.supportsCommands) {
this.suggestionProviders.push(new CommandProvider());
}
@@ -104,6 +108,18 @@ export default class Textbox extends React.Component {
this.setState({preview: !this.state.preview});
}
+ componentWillReceiveProps(nextProps) {
+ if (nextProps.channelId !== this.channelId) {
+ // Update channel id for AtMentionProvider.
+ const providers = this.suggestionProviders;
+ for (let i = 0; i < providers.length; i++) {
+ if (providers[i] instanceof AtMentionProvider) {
+ providers[i] = new AtMentionProvider(nextProps.channelId);
+ }
+ }
+ }
+ }
+
render() {
const hasText = this.props.messageText.length > 0;