akborana4 commited on
Commit
9fb1628
·
verified ·
1 Parent(s): 99ece78

Create Chat.jsx

Browse files
Files changed (1) hide show
  1. client/src/Chat.jsx +36 -0
client/src/Chat.jsx ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React, { useEffect, useState } from 'react';
2
+
3
+ export default function Chat({ socket, roomId, name }) {
4
+ const [messages, setMessages] = useState([]);
5
+ const [text, setText] = useState('');
6
+
7
+ useEffect(() => {
8
+ const onMsg = (m) => setMessages((prev) => [...prev, m]);
9
+ const onSys = (m) => setMessages((prev) => [...prev, { name: 'System', text: `${m.name} joined`, at: Date.now() }]);
10
+ socket.on('chat_message', onMsg);
11
+ socket.on('system', onSys);
12
+ return () => { socket.off('chat_message', onMsg); socket.off('system', onSys); };
13
+ }, [socket]);
14
+
15
+ const send = () => {
16
+ if (!text.trim()) return;
17
+ const m = { name, text, at: Date.now() };
18
+ setMessages((prev) => [...prev, m]);
19
+ socket.emit('chat_message', { roomId, name, text });
20
+ setText('');
21
+ };
22
+
23
+ return (
24
+ <div style={{ marginTop: 16 }}>
25
+ <div style={{ maxHeight: 200, overflow: 'auto', border: '1px solid #ddd', padding: 8 }}>
26
+ {messages.map((m, i) => (
27
+ <div key={i}><b>{m.name}:</b> {m.text}</div>
28
+ ))}
29
+ </div>
30
+ <div style={{ marginTop: 8, display: 'flex', gap: 8 }}>
31
+ <input value={text} onChange={e => setText(e.target.value)} placeholder="Type a message" style={{ flex: 1 }} />
32
+ <button onClick={send}>Send</button>
33
+ </div>
34
+ </div>
35
+ );
36
+ }