summaryrefslogtreecommitdiff
path: root/client/utils/use_chat.js
diff options
context:
space:
mode:
authorLogan Hunt <loganhunt@simponic.xyz>2022-04-01 16:04:00 -0600
committerLogan Hunt <loganhunt@simponic.xyz>2022-04-01 16:04:00 -0600
commitdbb9eea25f80e7984a112409863be5191af5bf5e (patch)
treecca24e23afc5e7bb4b92a0582aaec48f6a08af72 /client/utils/use_chat.js
parent1108970a6aeb98a2f113383c6437dd4d862dae10 (diff)
downloadlocchat-dbb9eea25f80e7984a112409863be5191af5bf5e.tar.gz
locchat-dbb9eea25f80e7984a112409863be5191af5bf5e.zip
Added way too much stuff
Diffstat (limited to 'client/utils/use_chat.js')
-rw-r--r--client/utils/use_chat.js48
1 files changed, 48 insertions, 0 deletions
diff --git a/client/utils/use_chat.js b/client/utils/use_chat.js
new file mode 100644
index 0000000..d5250bf
--- /dev/null
+++ b/client/utils/use_chat.js
@@ -0,0 +1,48 @@
+import { useState, useContext, useEffect, useRef } from 'react';
+import { AuthContext } from './auth_context';
+import { io } from 'socket.io-client';
+
+export const useChat = (chatRoom) => {
+ const [messages, setMessages] = useState([]);
+ const [connections, setConnections] = useState([]);
+ const messageRef = useRef([]);
+ const connectionsRef = 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]);
+ });
+ socket.on('userlist', ({ users }) => {
+ connectionsRef.current = users;
+ setConnections([...connectionsRef.current]);
+ });
+ return () => {
+ socket.off('new-message');
+ socket.close();
+ };
+ }
+ }, [chatRoom]);
+
+ const sendMessage = (message) => {
+ if (socket?.emit) {
+ socket.emit('message', message);
+ }
+ };
+
+ return [connections, messages, sendMessage];
+};