import { FC, KeyboardEventHandler, useEffect, useRef, useState } from "react" import { CHAT_URL, MAX_CHAT_MESSAGES } from "../../config" import useSession from "../../hooks/useSession" import { ChatMessage as Message } from "../../types" import Input from "../common/Input" import ChatMessage from "../message/ChatMessage" const Chat: FC = () => { const { session } = useSession() const [messages, setMessages] = useState([]) const wsRef = useRef(null) const messagesEndRef = useRef(null) useEffect(() => { wsRef.current = new WebSocket(CHAT_URL) wsRef.current.onmessage = (ev) => { const newMsg = JSON.parse(ev.data) as Message if (typeof newMsg === "string") return setMessages((old) => { if (old.length >= MAX_CHAT_MESSAGES) old.shift() return [...old, newMsg] }) } return () => { if (wsRef.current) wsRef.current.close() } }, []) useEffect(() => { messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }) }, [messages]) const handleChatInput: KeyboardEventHandler = (event) => { if (event.key === "Enter" && wsRef.current) { const msg = JSON.stringify({ fromUser: "niku", fromUserID: 10, toUser: "niku", toUserID: 10, content: event.currentTarget.value, }) wsRef.current.send(msg) event.currentTarget.value = "" } } return (

Stream Chat

{messages.map((message) => ( ))}
) } export default Chat