Added room functionality

This commit is contained in:
2023-03-15 11:53:12 +01:00
parent 0b7b9b544a
commit 82626e06ad
3 changed files with 77 additions and 24 deletions

View File

@@ -2,12 +2,14 @@ import React from "react";
import {BrowserRouter, Route, Routes} from "react-router-dom";
import Home from "../layout/pages/Home";
import NotFound from "../layout/pages/NotFound";
import Room from "../layout/pages/Room";
const Router = () => {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Home/>}/>
<Route path="room/:roomId" element={<Room/>}/>
<Route path="*" element={<NotFound/>}/>
</Routes>
</BrowserRouter>

View File

@@ -1,42 +1,42 @@
import React from "react";
import useWebSocket from 'react-use-websocket';
const WS_URL = "ws://localhost:5062/ws";
const ROOM_URL = 'http://localhost:5062/room';
const Home = () => {
const [message, setMessage] = React.useState<string>('');
const [messages, setMessages] = React.useState<string[]>([]);
const [rooms, setRooms] = React.useState<string[]>([]);
const websocket = useWebSocket(WS_URL, {
onOpen: () => {
console.log('WebSocket connection established.');
},
onMessage: (event) => {
setMessages([...messages, event.data]);
}
});
React.useEffect(() => {
fetch(ROOM_URL)
.then((r) => {
console.log(r);
return r.json();
})
.then((data) => {
console.log(data);
setRooms(data);
});
}, []);
const handleSend = () => {
websocket.sendMessage(message);
setMessage('');
const handleCreateRoom = () => {
fetch(ROOM_URL, {
method: 'POST',
}).then(r => r.json()).then(data => {
setRooms([...rooms, data]);
});
}
const handleMessageChange = (event: React.ChangeEvent<HTMLInputElement>) => {
setMessage(event.target.value);
const gotoRoom = (roomId: string) => {
window.location.href = `/room/${roomId}`;
}
return (
<div>
<form>
<input type="text" name="message" placeholder="Send a message" value={message}
onChange={handleMessageChange}/>
<span onClick={handleSend}>Send</span>
</form>
<button onClick={handleCreateRoom}>Create Room</button>
<ul>
{
messages.map((message, index) => {
return <li key={index}>{message}</li>
rooms.map((room, index) => {
return <li key={index} onClick={() => gotoRoom(room)}>{room}</li>
})
}
</ul>

51
src/layout/pages/Room.tsx Normal file
View File

@@ -0,0 +1,51 @@
import useWebSocket from "react-use-websocket";
import React from "react";
import {useParams} from "react-router";
const Room = () => {
const {roomId} = useParams();
const WS_URL = `ws://localhost:5062/room/${roomId}`;
const [message, setMessage] = React.useState<string>('');
const [messages, setMessages] = React.useState<string[]>([]);
const websocket = useWebSocket(WS_URL, {
onOpen: () => {
console.log('WebSocket connection established.');
},
onMessage: (event) => {
setMessages([...messages, event.data]);
}
});
const handleSend = () => {
websocket.sendMessage(message);
setMessage('');
}
const handleMessageChange = (event: React.ChangeEvent<HTMLInputElement>) => {
setMessage(event.target.value);
}
return (
<div>
<h1>Room {roomId}</h1>
<form>
<input type="text" name="message" placeholder="Send a message" value={message}
onChange={handleMessageChange}/>
<span onClick={handleSend}>Send</span>
</form>
<ul>
{
messages.map((message, index) => {
return <li key={index}>{message}</li>
})
}
</ul>
</div>
)
}
export default Room;