summaryrefslogtreecommitdiff
path: root/client/utils/use_messages.js
diff options
context:
space:
mode:
Diffstat (limited to 'client/utils/use_messages.js')
-rw-r--r--client/utils/use_messages.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/client/utils/use_messages.js b/client/utils/use_messages.js
new file mode 100644
index 0000000..e3a501e
--- /dev/null
+++ b/client/utils/use_messages.js
@@ -0,0 +1,42 @@
+import { useState, useContext, useEffect, useRef } from 'react';
+import { AuthContext } from './auth_context';
+import { io } from 'socket.io-client';
+
+export const useMessages = (chatRoom) => {
+ const [messages, setMessages] = useState([]);
+ const messageRef = useRef([]);
+ const [socket, setSocket] = useState({});
+ const [authToken] = useContext(AuthContext);
+
+ useEffect(() => {
+ if (chatRoom?.id) {
+ const socket = io({
+ query: {
+ chatRoomId: chatRoom.id,
+ },
+ auth: {
+ token: authToken,
+ },
+ });
+ socket.on('connect', () => {
+ setSocket(socket);
+ });
+ socket.on('new-message', (message) => {
+ messageRef.current.push(message);
+ setMessages([...messageRef.current]);
+ });
+ return () => {
+ socket.off('new-message');
+ socket.close();
+ };
+ }
+ }, [chatRoom]);
+
+ const sendMessage = (message) => {
+ if (socket?.emit) {
+ socket.emit('message', message);
+ }
+ };
+
+ return [messages, sendMessage];
+};