// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import SuggestionList from './suggestion/suggestion_list.jsx'; import SuggestionBox from './suggestion/suggestion_box.jsx'; import SwitchChannelProvider from './suggestion/switch_channel_provider.jsx'; import {FormattedMessage} from 'react-intl'; import {Modal} from 'react-bootstrap'; import {goToChannel, openDirectChannelToUser} from 'actions/channel_actions.jsx'; import ChannelStore from 'stores/channel_store.jsx'; import UserStore from 'stores/user_store.jsx'; import Constants from 'utils/constants.jsx'; import * as Utils from 'utils/utils.jsx'; import React from 'react'; import $ from 'jquery'; export default class SwitchChannelModal extends React.Component { constructor() { 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); this.handleKeyDown = this.handleKeyDown.bind(this); this.handleSubmit = this.handleSubmit.bind(this); this.switchToChannel = this.switchToChannel.bind(this); this.suggestionProviders = [new SwitchChannelProvider()]; this.state = { text: '', error: '' }; } componentDidUpdate(prevProps) { if (this.props.show && !prevProps.show) { const textbox = this.refs.search.getTextbox(); textbox.focus(); Utils.placeCaretAtEnd(textbox); } } onShow() { this.setState({ text: '', error: '' }); } onHide() { this.setState({ text: '', error: '' }); this.props.onHide(); } onExited() { this.selected = null; setTimeout(() => { $('#post_textbox').get(0).focus(); }); } onChange(e) { this.setState({text: e.target.value}); this.selected = null; } onItemSelected(item) { this.selected = item; } handleKeyDown(e) { this.setState({ error: '' }); if (e.keyCode === Constants.KeyCodes.ENTER) { this.handleSubmit(); } } handleSubmit() { let channel = null; if (!this.selected) { if (this.state.text !== '') { this.setState({ error: Utils.localizeMessage('channel_switch_modal.not_found', 'No matches found.') }); } return; } if (this.selected.type === Constants.DM_CHANNEL) { const user = UserStore.getProfileByUsername(this.selected.name); if (user) { openDirectChannelToUser( user.id, (ch) => { channel = ch; this.switchToChannel(channel); }, () => { channel = null; this.switchToChannel(channel); } ); } } else { channel = ChannelStore.get(this.selected.id); this.switchToChannel(channel); } } switchToChannel(channel) { if (channel !== null) { goToChannel(channel); this.onHide(); } else if (this.state.text !== '') { this.setState({ error: Utils.localizeMessage('channel_switch_modal.failed_to_open', 'Failed to open channel.') }); } } render() { const message = this.state.error; return (
{message}
); } } SwitchChannelModal.propTypes = { show: React.PropTypes.bool.isRequired, onHide: React.PropTypes.func.isRequired };