summaryrefslogtreecommitdiffstats
path: root/webapp/components/suggestion/channel_mention_provider.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/components/suggestion/channel_mention_provider.jsx')
-rw-r--r--webapp/components/suggestion/channel_mention_provider.jsx143
1 files changed, 0 insertions, 143 deletions
diff --git a/webapp/components/suggestion/channel_mention_provider.jsx b/webapp/components/suggestion/channel_mention_provider.jsx
deleted file mode 100644
index 1d85d8082..000000000
--- a/webapp/components/suggestion/channel_mention_provider.jsx
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
-// See License.txt for license information.
-
-import Suggestion from './suggestion.jsx';
-import Provider from './provider.jsx';
-
-import {autocompleteChannels} from 'actions/channel_actions.jsx';
-
-import ChannelStore from 'stores/channel_store.jsx';
-
-import AppDispatcher from 'dispatcher/app_dispatcher.jsx';
-import {Constants, ActionTypes} from 'utils/constants.jsx';
-
-import React from 'react';
-
-class ChannelMentionSuggestion extends Suggestion {
- render() {
- const isSelection = this.props.isSelection;
- const item = this.props.item;
-
- const channelName = item.channel.display_name;
- const purpose = item.channel.purpose;
-
- let className = 'mentions__name';
- if (isSelection) {
- className += ' suggestion--selected';
- }
-
- const description = '(~' + item.channel.name + ')';
-
- return (
- <div
- className={className}
- onClick={this.handleClick}
- >
- <div className='mention__align'>
- <span>
- {channelName}
- </span>
- <span className='mention__channelname'>
- {' '}
- {description}
- </span>
- </div>
- <div className='mention__purpose'>
- {purpose}
- </div>
- </div>
- );
- }
-}
-
-export default class ChannelMentionProvider extends Provider {
- constructor() {
- super();
-
- this.lastTermWithNoResults = '';
- this.lastCompletedWord = '';
- }
-
- handlePretextChanged(suggestionId, pretext) {
- const captured = (/(^|\s)(~([^~\r\n]*))$/i).exec(pretext.toLowerCase());
-
- if (!captured) {
- // Not a channel mention
- return false;
- }
-
- if (this.lastTermWithNoResults && pretext.startsWith(this.lastTermWithNoResults)) {
- // Just give up since we know it won't return any results
- return false;
- }
-
- if (this.lastCompletedWord && captured[0].startsWith(this.lastCompletedWord)) {
- // It appears we're still matching a channel handle that we already completed
- return false;
- }
-
- // Clear the last completed word since we've started to match new text
- this.lastCompletedWord = '';
-
- const prefix = captured[3];
-
- this.startNewRequest(suggestionId, prefix);
-
- autocompleteChannels(
- prefix,
- (channels) => {
- if (this.shouldCancelDispatch(prefix)) {
- return;
- }
-
- if (channels.length === 0) {
- this.lastTermWithNoResults = pretext;
- }
-
- // Wrap channels in an outer object to avoid overwriting the 'type' property.
- const wrappedChannels = [];
- const wrappedMoreChannels = [];
- const moreChannels = [];
- channels.forEach((item) => {
- if (ChannelStore.get(item.id)) {
- wrappedChannels.push({
- type: Constants.MENTION_CHANNELS,
- channel: item
- });
- return;
- }
-
- wrappedMoreChannels.push({
- type: Constants.MENTION_MORE_CHANNELS,
- channel: item
- });
-
- moreChannels.push(item);
- });
-
- const wrapped = wrappedChannels.concat(wrappedMoreChannels);
- const mentions = wrapped.map((item) => '~' + item.channel.name);
-
- AppDispatcher.handleServerAction({
- type: ActionTypes.RECEIVED_MORE_CHANNELS,
- channels: moreChannels
- });
-
- AppDispatcher.handleServerAction({
- type: ActionTypes.SUGGESTION_RECEIVED_SUGGESTIONS,
- id: suggestionId,
- matchedPretext: captured[2],
- terms: mentions,
- items: wrapped,
- component: ChannelMentionSuggestion
- });
- }
- );
-
- return true;
- }
-
- handleCompleteWord(term) {
- this.lastCompletedWord = term;
- }
-}