summaryrefslogtreecommitdiff
path: root/client/utils
diff options
context:
space:
mode:
Diffstat (limited to 'client/utils')
-rw-r--r--client/utils/generate_gruvbox.js19
-rw-r--r--client/utils/use_messages.js42
2 files changed, 61 insertions, 0 deletions
diff --git a/client/utils/generate_gruvbox.js b/client/utils/generate_gruvbox.js
new file mode 100644
index 0000000..033d893
--- /dev/null
+++ b/client/utils/generate_gruvbox.js
@@ -0,0 +1,19 @@
+// This is also from https://github.com/USUFSLC/sochat
+const gruvboxColors = [
+ '#b8bb26',
+ '#fabd2f',
+ '#83a598',
+ '#d3869b',
+ '#8ec07c',
+ '#458588',
+ '#cc241d',
+ '#d65d0e',
+ '#bdae93',
+];
+
+export const generateGruvboxFromString = (string) =>
+ gruvboxColors[
+ Array.from(string)
+ .map((x) => x.charCodeAt(0))
+ .reduce((a, x) => a + x, 0) % gruvboxColors.length
+ ];
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];
+};