From 504581d766f95160fc7626085c789806fa4d1274 Mon Sep 17 00:00:00 2001 From: Mathias Ayivor <74247733+mathiasayivor@users.noreply.github.com> Date: Mon, 17 Oct 2022 19:05:04 +0000 Subject: [PATCH] feat: added resend message option (#151) --- client/src/components/Chat.jsx | 76 ++++++++++++++++++------- client/src/components/MessageStatus.jsx | 2 +- server/index.js | 7 +++ 3 files changed, 64 insertions(+), 21 deletions(-) diff --git a/client/src/components/Chat.jsx b/client/src/components/Chat.jsx index d4be8587..62fc7e38 100644 --- a/client/src/components/Chat.jsx +++ b/client/src/components/Chat.jsx @@ -52,28 +52,17 @@ const Chat = () => { [state, currentChatId] ); - // Here whenever user will submit message it will be send to the server - const handleSubmit = async (e) => { - e.preventDefault(); - - const d = new Date(); - const time = d.getTime(); - const message = inputRef.current.value; - if (message === '' || senderId === undefined || senderId === '123456') { - return; - } - - if (inputRef.current) { - inputRef.current.value = ''; - inputRef.current.focus(); - } - - const tmpId = uuid(); - + const doSend = async ({ + senderId, + room, + tmpId = uuid(), + message, + time, + }) => { try { addMessage({ senderId, - room: currentChatId, + room, id: tmpId, message, time, @@ -81,6 +70,7 @@ const Chat = () => { }); } catch { logout(); + return false; } try { @@ -95,12 +85,13 @@ const Chat = () => { updateMessage(tmpId, sentMessage); } catch { logout(); + return false; } } catch (e) { try { updateMessage(tmpId, { senderId, - room: currentChatId, + room, id: tmpId, message, time, @@ -109,6 +100,8 @@ const Chat = () => { } catch { logout(); } + + return false; } finally { console.log('send complete'); console.log(`sender: ${message}`); @@ -120,6 +113,48 @@ const Chat = () => { // room: 'anon', // }); } + + return true; + }; + + // Here whenever user will submit message it will be send to the server + const handleSubmit = (e) => { + e.preventDefault(); + + const d = new Date(); + const message = inputRef.current.value; + if (message === '' || senderId === undefined || senderId === '123456') { + return; + } + + doSend({ + senderId, + room: currentChatId, + message, + time: d.getTime(), + }); + + if (inputRef.current) { + inputRef.current.value = ''; + inputRef.current.focus(); + } + }; + + const handleResend = (id) => { + if (!state[currentChatId]) { + return; + } + + const { senderId, room, message, time } = + state[currentChatId].messages[id]; + + doSend({ + senderId, + room, + message, + time, + tmpId: id, + }); }; const getTime = (time) => { @@ -160,6 +195,7 @@ const Chat = () => { sender.toString() === senderId.toString() } + onResend={() => handleResend(id)} /> diff --git a/client/src/components/MessageStatus.jsx b/client/src/components/MessageStatus.jsx index a2ff6b27..e962c368 100644 --- a/client/src/components/MessageStatus.jsx +++ b/client/src/components/MessageStatus.jsx @@ -31,7 +31,7 @@ export default function MessageStatus({ title="Resend message" onClick={handleResend} > - + )} diff --git a/server/index.js b/server/index.js index 3c222d46..21cc7cd5 100644 --- a/server/index.js +++ b/server/index.js @@ -201,6 +201,13 @@ io.on("connection", (socket) => { socket.on( "send_message", ({ senderId, message, time, chatId }, returnMessageToSender) => { + // Below line is just a failed message simulator for testing purposes. + + // const rndInt = Math.floor(Math.random() * 6) + 1; + // if (rndInt % 2 !== 0) { + // return; + // } + const user = getActiveUser({ socketId: socket.id, });