diff options
author | George Goldberg <george@gberg.me> | 2016-09-19 13:21:22 +0100 |
---|---|---|
committer | Joram Wilander <jwawilander@gmail.com> | 2016-09-19 08:21:22 -0400 |
commit | 8443ca58289055cde25a3cdaaa3987c6f8cfde4a (patch) | |
tree | ec957cd1903e76ba5e62eac710777abd74ee0330 /webapp/stores | |
parent | 781ff323db4c70e4ca476f9ef13a04e5aa063585 (diff) | |
download | chat-8443ca58289055cde25a3cdaaa3987c6f8cfde4a.tar.gz chat-8443ca58289055cde25a3cdaaa3987c6f8cfde4a.tar.bz2 chat-8443ca58289055cde25a3cdaaa3987c6f8cfde4a.zip |
PLT-1759 - Auto-complete for !channels when posting messages. (#3890)
* Auto-complete for !channels when posting messages.
This is part 1 of the fix for PLT-1759 to make channels linkable.
Still to do:
- Make the !channels clickable when they appear in messages. This is
blocked until PR #3865 is resolved as it looks like that refactors
some of the code that would be touched by making this change.
- Unit tests. Again, I think the above referenced PR should be merged
before tackling this.
* Fix style problems.
* Highlighting of !channel-names in messages.
This only identifies the !channel-name (not the display name). The
implementation of the auto-complete on channel names now needs to be
modified to convert to the channel handle before sending the message.
* Display !channel-name as !Display Name.
When we encounter !channel-name in a message, display it as a link using
the channel's actual name rather than it's handle (name).
* Match on names and display name, and use name.
* Autocomplete channels matching on both the name and the the display
name.
* Use the name as the text we fill in instead of the display name. It's
potentially a bit ugly, but it minimises complexity for now as
otherwise we'd have to do complicated things to the message box.
* Fix style issues.
* Load more channels everywhere.
Whenever we load the list of channels, we should also load the list of
more channels. This is to enable auto-completing and auto-linking of all
channels whether or not the user is in them currently.
* Include more channels in the map for linking.
* Listen for channel list updates for autolinking.
* Remove accidental console.log.
* Autocomplete on more channels too.
* i18n for channel autocomplete.
* Link directly to channels in !channel mentions.
This currently does not work if you aren't a member of that channel.
Need to decide what the correct behaviour is in that case.
* Fix style issues.
* Show channel name and handle in suggestion.
* Match channels only at start or after space.
* Better matching in text-formatting.
Only match channels after a space-type character or at the start in the
posts list too.
* Move the route construction to make tests work.
Moves route-construction out of text_formatting.jsx and into utils.jsx
so that the unit tests work once again.
Diffstat (limited to 'webapp/stores')
-rw-r--r-- | webapp/stores/channel_store.jsx | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/webapp/stores/channel_store.jsx b/webapp/stores/channel_store.jsx index 0f2ef9dc0..f1cd0bf82 100644 --- a/webapp/stores/channel_store.jsx +++ b/webapp/stores/channel_store.jsx @@ -47,6 +47,7 @@ class ChannelStoreClass extends EventEmitter { this.setUnreadCounts = this.setUnreadCounts.bind(this); this.getUnreadCount = this.getUnreadCount.bind(this); this.getUnreadCounts = this.getUnreadCounts.bind(this); + this.getChannelNamesMap = this.getChannelNamesMap.bind(this); this.currentId = null; this.postMode = this.POST_MODE_CHANNEL; @@ -358,6 +359,28 @@ class ChannelStoreClass extends EventEmitter { this.channels.splice(element, 1); } } + + getChannelNamesMap() { + var channelNamesMap = {}; + + var channels = this.getChannels(); + for (var key in channels) { + if (channels.hasOwnProperty(key)) { + var channel = channels[key]; + channelNamesMap[channel.name] = channel; + } + } + + var moreChannels = this.getMoreChannels(); + for (var moreKey in moreChannels) { + if (moreChannels.hasOwnProperty(moreKey)) { + var moreChannel = moreChannels[moreKey]; + channelNamesMap[moreChannel.name] = moreChannel; + } + } + + return channelNamesMap; + } } var ChannelStore = new ChannelStoreClass(); |