From 38c34017a3760e62fb08025c76fd3c7a25006e58 Mon Sep 17 00:00:00 2001 From: David Lu Date: Tue, 4 Oct 2016 08:49:57 -0400 Subject: [PATCH] PLT-4200/3708 Fixed outside team DM switching, allowed switching to uncreated DMs (#4111) * Fixed outside team DM switching, allowed switching to uncreated DMs * Update channel_switch_modal.jsx --- webapp/components/channel_switch_modal.jsx | 36 +++++++++++++++++++++- webapp/utils/utils.jsx | 7 ----- 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/webapp/components/channel_switch_modal.jsx b/webapp/components/channel_switch_modal.jsx index 57bc8b2d09..ec257bab59 100644 --- a/webapp/components/channel_switch_modal.jsx +++ b/webapp/components/channel_switch_modal.jsx @@ -27,14 +27,30 @@ export default class SwitchChannelModal extends React.Component { this.onExited = this.onExited.bind(this); this.handleKeyDown = this.handleKeyDown.bind(this); this.handleSubmit = this.handleSubmit.bind(this); + this.handleDmUserChange = this.handleDmUserChange.bind(this); this.suggestionProviders = [new SwitchChannelProvider()]; this.state = { + dmUsers: UserStore.getDirectProfiles(), text: '', error: '' }; } + componentDidMount() { + UserStore.addDmListChangeListener(this.handleDmUserChange); + } + + componentWillUnmount() { + UserStore.removeDmListChangeListener(this.handleDmUserChange); + } + + handleDmUserChange() { + this.setState({ + dmUsers: UserStore.getDirectProfiles() + }); + } + componentDidUpdate(prevProps) { if (this.props.show && !prevProps.show) { const textbox = this.refs.search.getTextbox(); @@ -83,7 +99,25 @@ export default class SwitchChannelModal extends React.Component { 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); - channel = ChannelStore.getByName(Utils.getDirectChannelNameByUsername(dmUsername, UserStore.getCurrentUser().username).trim()); + let user = null; + for (const id in this.state.dmUsers) { + if (this.state.dmUsers[id].username === dmUsername) { + user = this.state.dmUsers[id]; + break; + } + } + + if (user) { + Utils.openDirectChannelToUser( + user, + (ch) => { + channel = ch; + }, + () => { + channel = null; + } + ); + } } else { channel = ChannelStore.getByName(this.state.text.trim()); } diff --git a/webapp/utils/utils.jsx b/webapp/utils/utils.jsx index 5a47b0a634..73765495ce 100644 --- a/webapp/utils/utils.jsx +++ b/webapp/utils/utils.jsx @@ -1032,13 +1032,6 @@ export function getDirectChannelName(id, otherId) { return handle; } -export function getDirectChannelNameByUsername(username, otherUsername) { - const id = UserStore.getProfileByUsername(username).id; - const otherId = UserStore.getProfileByUsername(otherUsername).id; - - return getDirectChannelName(id, otherId); -} - // Used to get the id of the other user from a DM channel export function getUserIdFromChannelName(channel) { var ids = channel.name.split('__');