From b57c9fec89f736de8622218d6dc779012a266a91 Mon Sep 17 00:00:00 2001 From: enahum Date: Thu, 8 Dec 2016 12:20:03 -0300 Subject: PLT-4894 channel switcher (CTRL+K) to match message autocomplete (#4733) * PLT-4894 Change name display of direct messages in channel switcher (CTRL+K) to match message autocomplete * Addressing feedback --- webapp/components/channel_switch_modal.jsx | 16 +++++++------ webapp/components/suggestion/suggestion_box.jsx | 15 +++++++++++- .../suggestion/switch_channel_provider.jsx | 28 ++++++++++++++++++---- 3 files changed, 46 insertions(+), 13 deletions(-) (limited to 'webapp') diff --git a/webapp/components/channel_switch_modal.jsx b/webapp/components/channel_switch_modal.jsx index 063962a18..674725d88 100644 --- a/webapp/components/channel_switch_modal.jsx +++ b/webapp/components/channel_switch_modal.jsx @@ -24,6 +24,7 @@ export default class SwitchChannelModal extends React.Component { super(); this.onChange = this.onChange.bind(this); + this.onItemSelected = this.onItemSelected.bind(this); this.onShow = this.onShow.bind(this); this.onHide = this.onHide.bind(this); this.onExited = this.onExited.bind(this); @@ -72,6 +73,10 @@ export default class SwitchChannelModal extends React.Component { this.setState({text: e.target.value}); } + onItemSelected(item) { + this.selected = item; + } + handleKeyDown(e) { this.setState({ error: '' @@ -82,13 +87,10 @@ export default class SwitchChannelModal extends React.Component { } handleSubmit() { - const name = this.state.text.trim(); let channel = null; - // TODO: Replace this hack with something reasonable - if (name.indexOf(Utils.localizeMessage('channel_switch_modal.dm', '(Direct Message)')) > 0) { - const dmUsername = name.substr(0, name.indexOf(Utils.localizeMessage('channel_switch_modal.dm', '(Direct Message)')) - 1); - const user = UserStore.getProfileByUsername(dmUsername); + if (this.selected.type === Constants.DM_CHANNEL) { + const user = UserStore.getProfileByUsername(this.selected.name); if (user) { openDirectChannelToUser( @@ -104,7 +106,7 @@ export default class SwitchChannelModal extends React.Component { ); } } else { - channel = ChannelStore.getByName(this.state.text.trim()); + channel = ChannelStore.getByName(this.selected.name); this.switchToChannel(channel); } } @@ -155,10 +157,10 @@ export default class SwitchChannelModal extends React.Component { onChange={this.onChange} value={this.state.text} onKeyDown={this.handleKeyDown} + onItemSelected={this.onItemSelected} listComponent={SuggestionList} maxLength='64' providers={this.suggestionProviders} - preventDefaultSubmit={false} listStyle='bottom' /> diff --git a/webapp/components/suggestion/suggestion_box.jsx b/webapp/components/suggestion/suggestion_box.jsx index 7f8bbf309..67a29fec3 100644 --- a/webapp/components/suggestion/suggestion_box.jsx +++ b/webapp/components/suggestion/suggestion_box.jsx @@ -152,6 +152,17 @@ export default class SuggestionBox extends React.Component { this.props.onChange(e); } + if (this.props.onItemSelected) { + const items = SuggestionStore.getItems(this.suggestionId); + const selection = SuggestionStore.getSelection(this.suggestionId); + for (const i of items) { + if (i.name === selection) { + this.props.onItemSelected(i); + break; + } + } + } + textbox.focus(); // set the caret position after the next rendering @@ -199,6 +210,7 @@ export default class SuggestionBox extends React.Component { // Don't pass props used by SuggestionBox Reflect.deleteProperty(props, 'providers'); + Reflect.deleteProperty(props, 'onItemSelected'); const childProps = { ref: 'textbox', @@ -280,5 +292,6 @@ SuggestionBox.propTypes = { // explicitly name any input event handlers we override and need to manually call onChange: React.PropTypes.func, - onKeyDown: React.PropTypes.func + onKeyDown: React.PropTypes.func, + onItemSelected: React.PropTypes.func }; diff --git a/webapp/components/suggestion/switch_channel_provider.jsx b/webapp/components/suggestion/switch_channel_provider.jsx index cb907862a..b41bc4f11 100644 --- a/webapp/components/suggestion/switch_channel_provider.jsx +++ b/webapp/components/suggestion/switch_channel_provider.jsx @@ -7,7 +7,7 @@ import ChannelStore from 'stores/channel_store.jsx'; import UserStore from 'stores/user_store.jsx'; import {autocompleteUsers} from 'actions/user_actions.jsx'; - +import Client from 'client/web_client.jsx'; import AppDispatcher from 'dispatcher/app_dispatcher.jsx'; import {Constants, ActionTypes} from 'utils/constants.jsx'; import * as Utils from 'utils/utils.jsx'; @@ -25,7 +25,7 @@ class SwitchChannelSuggestion extends Suggestion { let displayName = ''; if (item.type === Constants.DM_CHANNEL) { - displayName = item.display_name + ' ' + Utils.localizeMessage('channel_switch_modal.dm', '(Direct Message)'); + displayName = item.display_name; } else { displayName = item.display_name + ' (' + item.name + ')'; } @@ -36,7 +36,14 @@ class SwitchChannelSuggestion extends Suggestion { } else if (item.type === Constants.PRIVATE_CHANNEL) { icon =
; } else { - icon =
; + icon = ( +
+