Compare commits

...

2 Commits

Author SHA1 Message Date
b6994554b3 front: GameHeader as one line of elemnts 2023-10-27 13:41:56 +02:00
74c396bea7 front: GameComponent refactoring 2023-10-27 12:51:32 +02:00
9 changed files with 82 additions and 127 deletions

View File

@ -7,26 +7,24 @@ import Leaderboard from "./components/Leaderboard"
import Game from "./components/Game" import Game from "./components/Game"
import About from "./components/About" import About from "./components/About"
function App() { function App() {
return <div className="App"> return <div className="App">
<BrowserRouter> <BrowserRouter>
<Header/> <Header />
<div className="Container"> <Routes>
<Routes> {/* https://stackoverflow.com/questions/40541994/multiple-path-names-for-a-same-component-in-react-router */}
{/* https://stackoverflow.com/questions/40541994/multiple-path-names-for-a-same-component-in-react-router */} <Route path="/game" element={<Game />} />
<Route path="/game" element={<Game/>} /> <Route path="/game/new" element={<Game />} />
<Route path="/game/new" element={<Game/>} /> <Route path="/game/proposal" element={<Game />} />
<Route path="/game/proposal" element={<Game/>} /> <Route path="/game/active" element={<Game />} />
<Route path="/game/active" element={<Game/>} /> <Route path="/game/archive" element={<Game />} />
<Route path="/game/archive" element={<Game/>} />
<Route path="/leaderboard" element={<Leaderboard />} />
<Route path="/leaderboard" element={<Leaderboard/>} /> <Route path="/about" element={<About />} />
<Route path="/about" element={<About/>} /> </Routes>
</Routes>
</div>
</BrowserRouter> </BrowserRouter>
</div> </div>
} }
export default App; export default App;

View File

@ -1,9 +1,9 @@
.split { .game {
width: 100%; width: 100%;
float: left; float: left;
} }
.split .left { .game .left-side {
float: left; float: left;
width: 45%; width: 45%;
/* max-width: 400px; */ /* max-width: 400px; */
@ -15,7 +15,7 @@
align-items: center; align-items: center;
} }
.split .right { .game .right-side {
float: left; float: left;
width: 55%; width: 55%;
} }

View File

@ -0,0 +1,25 @@
import './Game.css';
import React from 'react';
import GameView from './Game/GameView'
import GameSelector from './Game/GameSelector'
import GameAction from './Game/GameAction'
import GameBoard from './Game/GameBoard'
import NewGame from './Game/NewGame';
export default function Game() {
return (
<div className="game">
<div className='left-side'>
<GameView />
<GameSelector />
<NewGame />
</div>
<div className='right-side'>
<GameAction />
<GameBoard />
</div>
</div>
)
}

View File

@ -1,19 +0,0 @@
import React from 'react';
export function Accept({uuid}) {
return <button className="action" id={uuid} type="submit">
Accept
</button>
}
// export function Reject({uuid}) {
// return <button className="action" id={uuid} type="submit" >
// Reject
// </button>
// }
export function Cancel({uuid}) {
return <button className="action" id={uuid} type="submit">
Cancel
</button>
}

View File

@ -1,24 +0,0 @@
import React, {useState} from 'react';
export default function Cancel({uuid}) {
const [pending, setPending] = useState(new Map())
for (const [key, value] of pending)
console.log("cancel", key, value);
function sendRequest(uuid2reject) {
const nextPending = new Map(pending)
nextPending.set(uuid2reject, null)
setPending(nextPending)
}
const status = pending.get(uuid)
const isPending = status !== undefined
return <button
className={isPending ? "visible" : "action"}
onClick={() => sendRequest(uuid) }>
Cancel
</button>
}

View File

@ -1,25 +0,0 @@
import './index.css';
import React from 'react';
import GameView from './GameView'
import GameSelector from './GameSelector'
import GameAction from './GameAction'
import GameBoard from './GameBoard'
import NewGame from './NewGame';
export default function Game() {
return (
<div className="split">
<div className='split left'>
<GameView />
<GameSelector />
<NewGame />
</div>
<div className='split right'>
<GameAction />
<GameBoard />
</div>
</div>
)
}

View File

@ -1,19 +1,19 @@
h1 {
display: inline-flex;
}
.OnlineTgl { .OnlineTgl {
transform: scale(.25, .25); transform: scale(.5);
width: 1px; margin-left: -19px;
height: 1px;
} }
.app-header { .app-header {
padding: auto; display: flex;
}
.app-header nav {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
padding-top: 10px;
} }
.app-header a { .app-header a {

View File

@ -8,35 +8,36 @@ import { AppData } from "../../context/data"
export default function Header() { export default function Header() {
const [data] = React.useContext(AppData) const [data] = React.useContext(AppData)
return <div> return (
<h1> <div className='app-header'>
CordaCheckers<OnlineToggle /> <h1 >
</h1> CordaCheckers
<nav className='app-header'> </h1>
<NavLink to="/leaderboard" className={data.leaderboardFetching && "woble"}> <OnlineToggle />
<span>L</span> <nav>
<span>e</span> <NavLink to="/about" className={""}>
<span>a</span> About
<span>d</span> </NavLink>
<span>e</span> <NavLink to="/game" className={data.gamesFetching && "woble"}>
<span>r</span> <span>G</span>
<span>b</span> <span>a</span>
<span>o</span> <span>m</span>
<span>a</span> <span>e</span>
<span>r</span> </NavLink>
<span>d</span> <NavLink to="/leaderboard" className={data.leaderboardFetching && "woble"}>
</NavLink> <span>L</span>
<span>e</span>
<NavLink to="/game" className={data.gamesFetching && "woble"}> <span>a</span>
<span>G</span> <span>d</span>
<span>a</span> <span>e</span>
<span>m</span> <span>r</span>
<span>e</span> <span>b</span>
</NavLink> <span>o</span>
<span>a</span>
<NavLink to="/about" className={""}> <span>r</span>
About <span>d</span>
</NavLink> </NavLink>
</nav> </nav>
</div> </div>
)
} }

View File

@ -1,4 +1,3 @@
.tgl { .tgl {
display: none; display: none;