// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import React from 'react'; import SuggestionStore from 'stores/suggestion_store.jsx'; import ChannelStore from 'stores/channel_store.jsx'; import UserStore from 'stores/user_store.jsx'; import * as Utils from 'utils/utils.jsx'; import Client from 'utils/web_client.jsx'; import {FormattedMessage} from 'react-intl'; import Suggestion from './suggestion.jsx'; const MaxUserSuggestions = 40; class AtMentionSuggestion extends Suggestion { render() { const {item, isSelection} = this.props; let username; let description; let icon; if (item.username === 'all') { username = 'all'; description = ( ); icon = ; } else if (item.username === 'channel') { username = 'channel'; description = ( ); icon = ; } else { username = item.username; description = Utils.getFullName(item); icon = (
{icon}
{'@' + username} {description}
); } } export default class AtMentionProvider { handlePretextChanged(suggestionId, pretext) { const captured = (/@([a-z0-9\-\._]*)$/i).exec(pretext); if (captured) { const usernamePrefix = captured[1]; const users = UserStore.getActiveOnlyProfiles(true); let filtered = []; for (const id of Object.keys(users)) { const user = users[id]; if (user.username.startsWith(usernamePrefix) && user.delete_at <= 0) { filtered.push(user); } if (filtered.length >= MaxUserSuggestions) { break; } } if (!pretext.startsWith('/msg')) { // add dummy users to represent the @channel and @all special mentions when not using the /msg command if ('channel'.startsWith(usernamePrefix)) { filtered.push({username: 'channel'}); } if ('all'.startsWith(usernamePrefix)) { filtered.push({username: 'all'}); } } filtered = filtered.sort((a, b) => a.username.localeCompare(b.username)); const mentions = filtered.map((user) => '@' + user.username); SuggestionStore.addSuggestions(suggestionId, mentions, filtered, AtMentionSuggestion, captured[0]); } } }