import React, { Component } from 'react'; import { isChannel } from 'utils'; import ChatTitle from './ChatTitle'; import Search from './Search'; import MessageBox from './MessageBox'; import MessageInput from './MessageInput'; import UserList from './UserList'; export default class Chat extends Component { handleCloseClick = () => { const { tab, part, closePrivateChat, disconnect } = this.props; if (isChannel(tab)) { part([tab.name], tab.network); } else if (tab.name) { closePrivateChat(tab.network, tab.name); } else { disconnect(tab.network); } }; handleSearch = phrase => { const { tab, searchMessages } = this.props; if (isChannel(tab)) { searchMessages(tab.network, tab.name, phrase); } }; handleNickClick = nick => { const { tab, openPrivateChat, select } = this.props; openPrivateChat(tab.network, nick); select(tab.network, nick); }; handleTitleChange = title => { const { setNetworkName, tab } = this.props; setNetworkName(title, tab.network); }; handleNickChange = nick => { const { setNick, tab } = this.props; setNick(nick, tab.network, true); }; handleNickEditDone = nick => { const { setNick, tab } = this.props; setNick(nick, tab.network); }; render() { const { channel, coloredNicks, currentInputHistoryEntry, hasMoreMessages, messages, nick, search, showUserList, error, tab, title, users, addFetchedMessages, fetchMessages, inputActions, openModal, runCommand, sendMessage, toggleSearch, toggleUserList } = this.props; let chatClass; if (isChannel(tab)) { chatClass = 'chat-channel'; } else if (tab.name) { chatClass = 'chat-private'; } else { chatClass = 'chat-network'; } return ( <div className={chatClass}> <ChatTitle channel={channel} error={error} tab={tab} title={title} openModal={openModal} onCloseClick={this.handleCloseClick} onTitleChange={this.handleTitleChange} onToggleSearch={toggleSearch} onToggleUserList={toggleUserList} /> <Search search={search} onSearch={this.handleSearch} /> <MessageBox coloredNicks={coloredNicks} hasMoreMessages={hasMoreMessages} messages={messages} tab={tab} hideTopDate={search.show} onAddMore={addFetchedMessages} onFetchMore={fetchMessages} onNickClick={this.handleNickClick} /> <MessageInput currentHistoryEntry={currentInputHistoryEntry} nick={nick} tab={tab} onCommand={runCommand} onMessage={sendMessage} onNickChange={this.handleNickChange} onNickEditDone={this.handleNickEditDone} {...inputActions} /> <UserList coloredNicks={coloredNicks} showUserList={showUserList} users={users} onNickClick={this.handleNickClick} /> </div> ); } }