From fd379ec491d230f83da7f0cdacb22eb3935d0c87 Mon Sep 17 00:00:00 2001 From: DTieman Date: Wed, 22 Mar 2023 15:29:20 +0100 Subject: [PATCH] main page overhaul --- src/config/Router.tsx | 6 ++-- src/layout/pages/MainLobby.tsx | 37 ++++++++++++++++++++++++ src/layout/pages/Room.tsx | 19 +++++++++--- src/layout/pages/{Home.tsx => Rooms.tsx} | 23 +++++---------- src/styles/App.scss | 12 +++++++- src/styles/layout/pages/_pages.scss | 1 + src/styles/layout/pages/mainlobby.scss | 15 ++++++++++ src/styles/utils/_utils.scss | 1 + src/styles/utils/pointer.scss | 4 +++ 9 files changed, 95 insertions(+), 23 deletions(-) create mode 100644 src/layout/pages/MainLobby.tsx rename src/layout/pages/{Home.tsx => Rooms.tsx} (63%) create mode 100644 src/styles/layout/pages/mainlobby.scss create mode 100644 src/styles/utils/_utils.scss create mode 100644 src/styles/utils/pointer.scss diff --git a/src/config/Router.tsx b/src/config/Router.tsx index 2746f3d..7054d2c 100644 --- a/src/config/Router.tsx +++ b/src/config/Router.tsx @@ -1,14 +1,16 @@ import React from "react"; import {BrowserRouter, Route, Routes} from "react-router-dom"; -import Home from "../layout/pages/Home"; +import MainLobby from "../layout/pages/MainLobby"; import NotFound from "../layout/pages/NotFound"; import Room from "../layout/pages/Room"; +import Rooms from "../layout/pages/Rooms"; const Router = () => { return ( - }/> + }/> + }/> }/> }/> diff --git a/src/layout/pages/MainLobby.tsx b/src/layout/pages/MainLobby.tsx new file mode 100644 index 0000000..32a3954 --- /dev/null +++ b/src/layout/pages/MainLobby.tsx @@ -0,0 +1,37 @@ +import React from "react"; +import useTitle from "../../utils/TitleHook"; +import Card from "../components/Card"; + +const ROOM_URL = `http://${process.env.REACT_APP_API_URL}/room`; + +const MainLobby = () => { + + useTitle('MauLobby'); + + const handleCreateRoom = () => { + fetch(ROOM_URL, { + method: 'POST', + }).then(r => r.json()).then(data => { + window.location.href = `/room/${data}`; + }); + } + + const gotoRooms = () => { + window.location.href = '/rooms'; + } + + return ( +
+
+

Host Game

+ +
+
+

Join Game

+ +
+
+ ); +} + +export default MainLobby; diff --git a/src/layout/pages/Room.tsx b/src/layout/pages/Room.tsx index 61fae34..4e865f7 100644 --- a/src/layout/pages/Room.tsx +++ b/src/layout/pages/Room.tsx @@ -3,7 +3,6 @@ import React from "react"; import {useParams} from "react-router"; import {GHButton} from "../components/Button"; import useTitle from "../../utils/TitleHook"; -import Card from "../components/Card"; import Hand from "../components/Hand"; import Deck from "../components/Deck"; @@ -23,7 +22,13 @@ const Room = () => { const WS_URL = `ws://${process.env.REACT_APP_API_URL}/room/${roomId}`; - const [gameState, setGameState] = React.useState({PlayerName: '', Hand: [], CurrentCard: '', CurrentPlayer: '', Players: []}); + const [gameState, setGameState] = React.useState({ + PlayerName: '', + Hand: [], + CurrentCard: '', + CurrentPlayer: '', + Players: [] + }); const websocket = useWebSocket(WS_URL, { onOpen: () => { @@ -36,6 +41,8 @@ const Room = () => { }); const handleLeaveRoom = () => { + const socket = websocket.getWebSocket(); + if (socket) socket.close(); window.location.href = '/'; } @@ -61,7 +68,7 @@ const Room = () => { Leave Room { gameState.CurrentCard && - + } { gameState.Hand && @@ -70,7 +77,11 @@ const Room = () => {
    { gameState.Players.map((player, index) => { - return
  • {player} {player === gameState.PlayerName && '(You)'}
  • + const isCurrentPlayer = player === gameState.CurrentPlayer; + const isMe = player === gameState.PlayerName; + return
  • + {player} {isMe && '(You)'} +
  • }) }
diff --git a/src/layout/pages/Home.tsx b/src/layout/pages/Rooms.tsx similarity index 63% rename from src/layout/pages/Home.tsx rename to src/layout/pages/Rooms.tsx index 8e84117..98289fa 100644 --- a/src/layout/pages/Home.tsx +++ b/src/layout/pages/Rooms.tsx @@ -1,13 +1,12 @@ -import React from "react"; -import {GHButton} from "../components/Button"; -import {Link} from "react-router-dom"; import useTitle from "../../utils/TitleHook"; +import React from "react"; +import {Link} from "react-router-dom"; const ROOM_URL = `http://${process.env.REACT_APP_API_URL}/room`; -const Home = () => { +const Rooms = () => { - useTitle('Home'); + useTitle('Rooms'); const [rooms, setRooms] = React.useState([]); @@ -17,17 +16,9 @@ const Home = () => { .then(data => setRooms(data)); }, []); - const handleCreateRoom = () => { - fetch(ROOM_URL, { - method: 'POST', - }).then(r => r.json()).then(data => { - setRooms([...rooms, data]); - }); - } - return (
- Create Room +

Rooms

    { rooms.map((room, index) => { @@ -37,6 +28,6 @@ const Home = () => {
); -} +}; -export default Home; +export default Rooms; diff --git a/src/styles/App.scss b/src/styles/App.scss index 5c27e0c..e9cbf5d 100644 --- a/src/styles/App.scss +++ b/src/styles/App.scss @@ -1,2 +1,12 @@ @import "vendor/vendor"; -@import "layout/layout"; \ No newline at end of file +@import "layout/layout"; +@import "utils/utils"; + +@font-face { + font-family: "Mau"; + src: local('Mau'), url(../assets/fonts/OrientalCatsLight.otf) format('opentype'); +} + +h1, h2, h3, h4, h5 { + font-family: "Mau", serif; +} \ No newline at end of file diff --git a/src/styles/layout/pages/_pages.scss b/src/styles/layout/pages/_pages.scss index e69de29..00335b4 100644 --- a/src/styles/layout/pages/_pages.scss +++ b/src/styles/layout/pages/_pages.scss @@ -0,0 +1 @@ +@import "mainlobby"; \ No newline at end of file diff --git a/src/styles/layout/pages/mainlobby.scss b/src/styles/layout/pages/mainlobby.scss new file mode 100644 index 0000000..76c24a1 --- /dev/null +++ b/src/styles/layout/pages/mainlobby.scss @@ -0,0 +1,15 @@ +.main-lobby { + width: 100vw; + height: 100vh; + display: flex; + justify-content: center; + align-items: center; + gap: 2rem; + + &__button { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } +} \ No newline at end of file diff --git a/src/styles/utils/_utils.scss b/src/styles/utils/_utils.scss new file mode 100644 index 0000000..04972e8 --- /dev/null +++ b/src/styles/utils/_utils.scss @@ -0,0 +1 @@ +@import "pointer"; \ No newline at end of file diff --git a/src/styles/utils/pointer.scss b/src/styles/utils/pointer.scss new file mode 100644 index 0000000..57cca58 --- /dev/null +++ b/src/styles/utils/pointer.scss @@ -0,0 +1,4 @@ +.clickable { + cursor: pointer; + user-select: none; +} \ No newline at end of file