Compare commits
No commits in common. "b34335cefc96ad9427b3f5c6e35f9aff2e42296a" and "72daeddb9db91100b83ff2496ec909c369471116" have entirely different histories.
b34335cefc
...
72daeddb9d
@ -2,7 +2,7 @@ import './App.css';
|
|||||||
import React, { useState, useEffect, useCallback } from 'react';
|
import React, { useState, useEffect, useCallback } from 'react';
|
||||||
import {
|
import {
|
||||||
BrowserRouter,
|
BrowserRouter,
|
||||||
Routes,
|
Routes, //replaces "Switch" used till v5
|
||||||
Route,
|
Route,
|
||||||
} from "react-router-dom";
|
} from "react-router-dom";
|
||||||
|
|
||||||
@ -14,14 +14,19 @@ function App() {
|
|||||||
const [games, setGames] = useState(null);
|
const [games, setGames] = useState(null);
|
||||||
const [polling, setPolling] = useState(false);
|
const [polling, setPolling] = useState(false);
|
||||||
|
|
||||||
const pollGames = useCallback(() => {
|
const pollGames = useCallback(() => {
|
||||||
if (polling)
|
console.log('start polling..');
|
||||||
|
|
||||||
|
if (polling) {
|
||||||
|
console.log(' ..already in progress');
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
setPolling(true);
|
setPolling(true);
|
||||||
fetch('/api/gamestate')
|
fetch('/api/gamestate')
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
|
console.log('poooled');
|
||||||
setGames(data);
|
setGames(data);
|
||||||
setPolling(false);
|
setPolling(false);
|
||||||
})
|
})
|
||||||
@ -29,21 +34,24 @@ function App() {
|
|||||||
}, [polling]);
|
}, [polling]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const timer = setInterval(pollGames(), 35 * 1000); // <<-- poll new gamestates every 35 sec
|
const timer = setInterval(pollGames(), 35 * 1000);
|
||||||
return clearInterval(timer);
|
return clearInterval(timer);
|
||||||
}, [pollGames])
|
}, [pollGames])
|
||||||
|
|
||||||
return <div className="App">
|
return (
|
||||||
<BrowserRouter>
|
<div className="App">
|
||||||
<Header/>
|
<BrowserRouter>
|
||||||
<div className="Container">
|
<Header/>
|
||||||
<Routes>
|
<div className="Container">
|
||||||
<Route path="/leaderboard" element={<Leaderboard/>} />
|
<Routes>
|
||||||
<Route path="/gameproposal" element={<GameProposal games={games}/>} />
|
<Route path="/leaderboard" element={<Leaderboard/>} />
|
||||||
</Routes>
|
<Route path="/gameproposal" element={<GameProposal games={games}/>} />
|
||||||
</div>
|
</Routes>
|
||||||
</BrowserRouter>
|
</div>
|
||||||
|
|
||||||
|
</BrowserRouter>
|
||||||
</div>
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default App;
|
export default App;
|
||||||
|
@ -15,18 +15,6 @@
|
|||||||
margin: 5px;
|
margin: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.GameProposal .li p q {
|
|
||||||
color: gray;
|
|
||||||
}
|
|
||||||
|
|
||||||
.GameProposal .li button.action {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.GameProposal .li:hover button.action {
|
|
||||||
display: initial;
|
|
||||||
}
|
|
||||||
|
|
||||||
.separator {
|
.separator {
|
||||||
width: 20%;
|
width: 20%;
|
||||||
/* height: 20px; */
|
/* height: 20px; */
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {Accept, Reject, Cancel} from './GameProposalAction';
|
|
||||||
import './GameProposal.css';
|
import './GameProposal.css';
|
||||||
|
|
||||||
const State = {
|
const State = {
|
||||||
@ -17,42 +16,37 @@ const GameProposal = ({games}) => {
|
|||||||
|
|
||||||
const waitForYou = games
|
const waitForYou = games
|
||||||
.filter(game => game.status === State.WaitForYou)
|
.filter(game => game.status === State.WaitForYou)
|
||||||
.map(game => {
|
.map(game => { return (
|
||||||
return <div class="li" key={game.uuid}>
|
<div class="li" key={game.uuid}>
|
||||||
<p>
|
<p>
|
||||||
from {game.opponentName}, opponentColor {game.opponentColor}
|
from {game.opponentName}, opponentColor {game.opponentColor}<br/>
|
||||||
<br/>
|
<q color="grey">{game.message}</q>
|
||||||
<q>{game.message}</q>
|
|
||||||
<br/>
|
|
||||||
<Accept uuid={game.uuid}/>
|
|
||||||
<Reject uuid={game.uuid}/>
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
});
|
)});
|
||||||
|
|
||||||
const WaitForOpponent = games
|
const WaitForOpponent = games
|
||||||
.filter(game => game.status === State.WaitForOpponent)
|
.filter(game => game.status === State.WaitForOpponent)
|
||||||
.map(game => {
|
.map(game => { return (
|
||||||
return <div class="li" key={game.uuid}>
|
<div class="li" key={game.uuid}>
|
||||||
<p>
|
<p>
|
||||||
to {game.opponentName}, opponentColor ⛀ ⛂{game.opponentColor}
|
to {game.opponentName}, opponentColor ⛀ ⛂{game.opponentColor}<br/>
|
||||||
<br/>
|
<q color="grey">{game.message}</q>
|
||||||
<q>{game.message}</q>
|
|
||||||
<br/>
|
|
||||||
<Cancel uuid={game.uuid}/>
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
|
||||||
});
|
|
||||||
|
|
||||||
return <div className="GameProposal">
|
|
||||||
{waitForYou}
|
|
||||||
{WaitForOpponent.length > 0 &&
|
|
||||||
<div class="separator">
|
|
||||||
waiting for opponent ({WaitForOpponent.length})
|
|
||||||
</div>
|
</div>
|
||||||
}
|
)});
|
||||||
{WaitForOpponent}
|
|
||||||
</div>
|
return (
|
||||||
|
<p className="GameProposal">
|
||||||
|
{waitForYou}
|
||||||
|
{WaitForOpponent.length > 0 &&
|
||||||
|
<div class="separator">
|
||||||
|
waiting for opponent ({WaitForOpponent.length})
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
{WaitForOpponent}
|
||||||
|
</p>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default GameProposal;
|
export default GameProposal;
|
||||||
|
@ -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>
|
|
||||||
}
|
|
@ -24,36 +24,40 @@ const Leaderboard = () => {
|
|||||||
//
|
//
|
||||||
// return <li key={playerName}>
|
// return <li key={playerName}>
|
||||||
// {playerName}: played {rank.gamesPlayed}, won {rank.gamesWon}, draw {rank.gamesDraw}
|
// {playerName}: played {rank.gamesPlayed}, won {rank.gamesWon}, draw {rank.gamesDraw}
|
||||||
// </li>
|
// </li>
|
||||||
// });
|
// });
|
||||||
// return <ul>{listItems}</ul>;
|
// return <ul>{listItems}</ul>;
|
||||||
|
|
||||||
const tableRows = Object.keys(data).map(playerName => {
|
const tableRows = Object.keys(data).map(playerName => {
|
||||||
var rank = data[playerName];
|
var rank = data[playerName];
|
||||||
|
|
||||||
return <tr key={playerName}>
|
return (
|
||||||
<td>{playerName}</td>
|
<tr key={playerName}>
|
||||||
<td>{rank.gamesPlayed}</td>
|
<td>{playerName}</td>
|
||||||
<td>{rank.gamesWon}</td>
|
<td>{rank.gamesPlayed}</td>
|
||||||
<td>{rank.gamesDraw}</td>
|
<td>{rank.gamesWon}</td>
|
||||||
|
<td>{rank.gamesDraw}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
return <div className="Leaderboard">
|
return (
|
||||||
<table>
|
<div className="Leaderboard">
|
||||||
<thead>
|
<table>
|
||||||
<tr>
|
<thead>
|
||||||
<th></th>
|
<tr>
|
||||||
<th>Played</th>
|
<th></th>
|
||||||
<th>Won</th>
|
<th>Played</th>
|
||||||
<th>Draw</th>
|
<th>Won</th>
|
||||||
</tr>
|
<th>Draw</th>
|
||||||
</thead>
|
</tr>
|
||||||
<tbody>
|
</thead>
|
||||||
{ tableRows }
|
<tbody>
|
||||||
</tbody>
|
{ tableRows }
|
||||||
</table>
|
</tbody>
|
||||||
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Leaderboard;
|
export default Leaderboard;
|
||||||
|
Loading…
Reference in New Issue
Block a user