diff --git a/web-chat/src/MessageInput.tsx b/web-chat/src/MessageInput.tsx index f3fc69d688..fda34fc022 100644 --- a/web-chat/src/MessageInput.tsx +++ b/web-chat/src/MessageInput.tsx @@ -4,16 +4,18 @@ import { useWaku } from './WakuContext'; interface Props { messageHandler: (msg: string) => void; - sendMessage: () => void; + sendMessage: (() => Promise) | undefined; } export default function MessageInput(props: Props) { const [inputText, setInputText] = useState(''); const { waku } = useWaku(); - const sendMessage = () => { - props.sendMessage(); - setInputText(''); + const sendMessage = async () => { + if (props.sendMessage) { + await props.sendMessage(); + setInputText(''); + } }; const messageHandler = (event: ChangeEvent) => { @@ -21,9 +23,9 @@ export default function MessageInput(props: Props) { props.messageHandler(event.target.value); }; - const keyPressHandler = (event: KeyboardEvent) => { + const keyPressHandler = async (event: KeyboardEvent) => { if (event.key === 'Enter') { - sendMessage(); + await sendMessage(); } }; diff --git a/web-chat/src/Room.tsx b/web-chat/src/Room.tsx index 8c31c19f59..8f09914224 100644 --- a/web-chat/src/Room.tsx +++ b/web-chat/src/Room.tsx @@ -16,27 +16,6 @@ export default function Room(props: Props) { let [messageToSend, setMessageToSend] = useState(''); const { waku } = useWaku(); - const messageHandler = (msg: string) => { - setMessageToSend(msg); - }; - - const sendMessage = async () => { - if (messageToSend.startsWith('/')) { - props.commandHandler(messageToSend); - } else { - const chatMessage = new ChatMessage( - new Date(), - props.nick, - messageToSend - ); - const wakuMsg = WakuMessage.fromBytes( - chatMessage.encode(), - ChatContentTopic - ); - await waku!.relay.send(wakuMsg); - } - }; - return (
{ + return handleMessage( + messageToSend, + props.nick, + props.commandHandler, + waku.relay.send.bind(waku.relay) + ); + } + : undefined + } />
); } +async function handleMessage( + message: string, + nick: string, + commandHandler: (cmd: string) => void, + messageSender: (msg: WakuMessage) => Promise +) { + if (message.startsWith('/')) { + commandHandler(message); + } else { + const chatMessage = new ChatMessage(new Date(), nick, message); + const wakuMsg = WakuMessage.fromBytes( + chatMessage.encode(), + ChatContentTopic + ); + return messageSender(wakuMsg); + } +} + interface LinesProps { messages: ChatMessage[]; }