From d7b84d83f31a88a83c12f8a81d7c705b42b94d54 Mon Sep 17 00:00:00 2001 From: bender Date: Thu, 14 May 2026 16:35:52 +0000 Subject: [PATCH 1/2] Add src/app/chat/page.tsx --- src/app/chat/page.tsx | 66 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/app/chat/page.tsx diff --git a/src/app/chat/page.tsx b/src/app/chat/page.tsx new file mode 100644 index 0000000..aca05cb --- /dev/null +++ b/src/app/chat/page.tsx @@ -0,0 +1,66 @@ +"use client"; + +import { useState, useEffect, useCallback, useRef } from 'react'; +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import NavbarStyleCentered from '@/components/navbar/NavbarStyleCentered/NavbarStyleCentered'; +import TextAnimation from '@/components/text/TextAnimation'; +import ButtonBounceEffect from '@/components/button/ButtonBounceEffect/ButtonBounceEffect'; +import Textarea from '@/components/form/Textarea'; + +export default function ChatPage() { + const [messages, setMessages] = useState<{id: number, text: string, sender: string}[]>([]); + const [input, setInput] = useState(''); + const socket = useRef(null); + + useEffect(() => { + socket.current = new WebSocket('ws://localhost:8080'); + socket.current.onmessage = (event) => { + const newMessage = JSON.parse(event.data); + setMessages((prev) => [...prev, { id: Date.now(), ...newMessage }]); + }; + return () => socket.current?.close(); + }, []); + + const sendMessage = useCallback(() => { + if (input.trim() && socket.current) { + socket.current.send(JSON.stringify({ text: input, sender: 'User' })); + setInput(''); + } + }, [input]); + + return ( + +
+ +
+ +
+
+ {messages.map((m) => ( +
+ {m.sender}: {m.text} +
+ ))} +
+
+