corda-checkers/webapp/src/App.js

50 lines
1.2 KiB
JavaScript
Raw Normal View History

2023-08-13 15:31:47 +02:00
import './App.css';
import React, { useState, useEffect, useCallback } from 'react';
import {
BrowserRouter,
2023-10-14 10:43:44 +02:00
Routes,
Route,
} from "react-router-dom";
import Header from "./Header"
import Leaderboard from "./Leaderboard";
import GameProposal from "./GameProposal";
function App() {
const [games, setGames] = useState(null);
const [polling, setPolling] = useState(false);
2023-10-14 10:43:44 +02:00
const pollGames = useCallback(() => {
if (polling)
return;
setPolling(true);
fetch('/api/gamestate')
.then(response => response.json())
.then(data => {
setGames(data);
setPolling(false);
})
.catch(err => console.log(err.message));
}, [polling]);
2023-08-13 15:31:47 +02:00
useEffect(() => {
2023-10-14 10:43:44 +02:00
const timer = setInterval(pollGames(), 35 * 1000); // <<-- poll new gamestates every 35 sec
return clearInterval(timer);
}, [pollGames])
2023-08-13 15:31:47 +02:00
2023-10-14 10:43:44 +02:00
return <div className="App">
<BrowserRouter>
<Header/>
<div className="Container">
<Routes>
<Route path="/leaderboard" element={<Leaderboard/>} />
<Route path="/gameproposal" element={<GameProposal games={games}/>} />
</Routes>
</div>
</BrowserRouter>
2023-08-13 15:31:47 +02:00
</div>
}
export default App;