- +
diff --git a/src/components/MessageEntryForm.js b/src/components/MessageEntryForm.js index af420cf..52d1b59 100644 --- a/src/components/MessageEntryForm.js +++ b/src/components/MessageEntryForm.js @@ -12,13 +12,76 @@ class MessageEntryForm extends React.Component { handleChange(e) { this.setState({ [e.target.name]: e.target.value }) } - handleSubmit(e) { e.preventDefault() - this.props.submitMessage(this.state.message) + this.submitMessage(this.state.message) } + submitMessage(msg) { + if (msg[0] === '/') return this.parseCommand() + if (!msg.length > 0) return + + this.sendMessage( + this.props.formatMessage( + msg, + this.props.socket.id, + this.props.socket.nick, + this.props.buffer + ) + ) + this.setState({ message: '' }) + } + sendMessage(msg) { + if (!msg) { + console.log('[sendMessage] Got no message. Fix your code!') + return + } + this.props.socket.emit('message', msg) + if (msg.to[0] !== '#') { + if (msg.to === this.props.buffer) msg.read = true + const messages = this.props.messages.concat(msg) + this.setState({ messages }) + } + } + parseCommand() { + const args = this.state.message.split(' ') + const cmd = args[0].slice(1) + if (cmd === 'join') { + if (!args[1]) { + alert('did you forget a channel to join?') + return + } + this.props.join(args[1]) + } else if (cmd === 'part' || cmd === 'leave') { + this.part(args[1] ? args[1] : this.props.buffer) + } else if (cmd === 'nick') { + if (!args[1]) { + alert('A new nick could be useful.') + return + } + this.nick(args[1]) + } else { + alert(`unknown command: ${cmd}`) + } + this.setState({ message: '' }) + } + part(room) { + console.log(`leaving ${room}`) + this.props.socket.emit('part', room) + const chats = this.props.chats.filter(c => c !== room) + this.props.activateChat('/', chats) + } + nick(nick) { + if (nick[0] === '#') { + alert('nick cannot start with #, sorry!') + return + } + console.log(`Changing nick to ${nick}`) + this.props.socket.nick = nick + this.props.socket.emit('change nick', nick) + } + render() { - return ( + return this.props.socket.id ? (
- submit as {this.props.user.nick} + submit as {this.props.socket.nick}
+ ) : ( +
Disconnected
) } } diff --git a/src/components/Messages.js b/src/components/Messages.js index 03f08d1..fc822c5 100644 --- a/src/components/Messages.js +++ b/src/components/Messages.js @@ -1,13 +1,23 @@ import React from 'react' import MessageEntryForm from './MessageEntryForm' const Messages = props => { - const { title, namespace, messages, user, submitMessage } = props + const { + title, + buffer, + chats, + messages, + socket, + activateChat, + join, + formatMessage, + submitMessage, + } = props return (
{/*Main Section Header*/}

- {title} {namespace} + {title} {buffer}

{/*Main Section Content*/} @@ -16,19 +26,34 @@ const Messages = props => { {messages .filter( m => - (m.to[0] === '#' && m.to === namespace) || - (m.to[0] !== '#' && m.from === namespace) || - (m.from === user.socketId && m.to === namespace) + (m.to[0] === '#' && m.to === buffer) || + (m.to[0] !== '#' && m.from === buffer) || + (m.from === socket.socketId && m.to === buffer) ) - .map(m => ( -
-
{m.date}
-
{m.nick}
-
{m.text}
-
- ))} + .map(m => { + console.log(m) + const rowColor = m.nick === 'server' ? 'text-secondary' : '' + return ( +
+
{m.date}
+ {m.nick === 'server' ? null : ( +
{m.nick}:
+ )} +
{m.text}
+
+ ) + })}
- + ) diff --git a/src/components/Topbar.js b/src/components/Topbar.js index 7600b54..0651ad0 100644 --- a/src/components/Topbar.js +++ b/src/components/Topbar.js @@ -2,7 +2,7 @@ import React from 'react' import { Navbar, Nav, Dropdown } from 'react-bootstrap' const Topbar = props => { - const { allUsers, user, allNamespaces, query, join } = props + const { allUsers, socket, allNamespaces, query, join } = props return ( @@ -16,7 +16,7 @@ const Topbar = props => { {allUsers - .filter(u => u.socketId !== user.id && u.offline !== true) + .filter(u => u.socketId !== socket.id && u.offline !== true) .map(u => (