]> git.localhorst.tv Git - alttp.git/blob - resources/js/components/App.js
1f188fb745d084d9080ee142114b340acdf54727
[alttp.git] / resources / js / components / App.js
1 import axios from 'axios';
2 import React, { useEffect, useState } from 'react';
3 import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom';
4
5 import Header from './common/Header';
6 import AlttpSeed from './pages/AlttpSeed';
7 import Technique from './pages/Technique';
8 import Tournament from './pages/Tournament';
9 import User from './pages/User';
10 import AlttpBaseRomProvider from '../helpers/AlttpBaseRomContext';
11 import UserContext from '../helpers/UserContext';
12
13 const App = () => {
14         const [user, setUser] = useState(null);
15
16         const checkAuth = async () => {
17                 try {
18                         const response = await axios.get('/api/user');
19                         setUser(response.data);
20                 } catch (e) {
21                         setUser(null);
22                 }
23         };
24
25         const doLogout = async () => {
26                 await axios.post('/logout');
27                 await checkAuth();
28         };
29
30         useEffect(() => {
31                 let timer = null;
32                 axios
33                         .get('/sanctum/csrf-cookie')
34                         .then(() => {
35                                 checkAuth();
36                                 timer = setInterval(checkAuth, 15 * 60 * 1000);
37                         });
38                 return () => {
39                         if (timer) clearInterval(timer);
40                 };
41         }, []);
42
43         useEffect(() => {
44                 window.Echo.channel('App.Control')
45                         .listen('PleaseRefresh', () => {
46                                 location.reload();
47                         });
48                 return () => {
49                         window.Echo.leave('App.Control');
50                 };
51         }, []);
52
53         return <BrowserRouter>
54                 <AlttpBaseRomProvider>
55                         <UserContext.Provider value={user}>
56                                 <Header doLogout={doLogout} />
57                                 <Routes>
58                                         <Route path="h/:hash" element={<AlttpSeed />} />
59                                         <Route path="tech/:name" element={<Technique />} />
60                                         <Route path="tournaments/:id" element={<Tournament />} />
61                                         <Route path="users/:id" element={<User />} />
62                                         <Route path="*" element={<Navigate to="/tournaments/4" />} />
63                                 </Routes>
64                         </UserContext.Provider>
65                 </AlttpBaseRomProvider>
66         </BrowserRouter>;
67 };
68
69 export default App;