]> git.localhorst.tv Git - alttp.git/blob - resources/js/components/App.js
fe8ff25c31860b95b202355967852d3f2f352297
[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 Footer from './common/Footer';
6 import Header from './common/Header';
7 import AlttpSeed from './pages/AlttpSeed';
8 import Front from './pages/Front';
9 import Technique from './pages/Technique';
10 import Techniques from './pages/Techniques';
11 import Tournament from './pages/Tournament';
12 import User from './pages/User';
13 import AlttpBaseRomProvider from '../helpers/AlttpBaseRomContext';
14 import UserContext from '../helpers/UserContext';
15
16 const App = () => {
17         const [user, setUser] = useState(null);
18
19         const checkAuth = async () => {
20                 try {
21                         const response = await axios.get('/api/user');
22                         setUser(response.data);
23                 } catch (e) {
24                         setUser(null);
25                 }
26         };
27
28         const doLogout = async () => {
29                 await axios.post('/logout');
30                 await checkAuth();
31         };
32
33         useEffect(() => {
34                 let timer = null;
35                 axios
36                         .get('/sanctum/csrf-cookie')
37                         .then(() => {
38                                 checkAuth();
39                                 timer = setInterval(checkAuth, 15 * 60 * 1000);
40                         });
41                 return () => {
42                         if (timer) clearInterval(timer);
43                 };
44         }, []);
45
46         useEffect(() => {
47                 window.Echo.channel('App.Control')
48                         .listen('PleaseRefresh', () => {
49                                 location.reload();
50                         });
51                 return () => {
52                         window.Echo.leave('App.Control');
53                 };
54         }, []);
55
56         return <BrowserRouter>
57                 <AlttpBaseRomProvider>
58                         <UserContext.Provider value={user}>
59                                 <Header doLogout={doLogout} />
60                                 <Routes>
61                                         <Route path="h/:hash" element={<AlttpSeed />} />
62                                         <Route
63                                                 path="modes"
64                                                 element={<Techniques namespace="modes" type="mode" />}
65                                         />
66                                         <Route
67                                                 path="modes/:name"
68                                                 element={<Technique namespace="modes" type="mode" />}
69                                         />
70                                         <Route
71                                                 path="rulesets"
72                                                 element={<Techniques namespace="rulesets" type="ruleset" />}
73                                                 />
74                                         <Route
75                                                 path="rulesets/:name"
76                                                 element={<Technique namespace="rulesets" type="ruleset" />}
77                                         />
78                                         <Route
79                                                 path="tech"
80                                                 element={<Techniques namespace="techniques" type="tech" />}
81                                         />
82                                         <Route
83                                                 path="tech/:name"
84                                                 element={<Technique namespace="techniques" type="tech" />}
85                                         />
86                                         <Route path="tournaments/:id" element={<Tournament />} />
87                                         <Route path="users/:id" element={<User />} />
88                                         <Route path="/" element={<Front />} />
89                                         <Route path="*" element={<Navigate to="/" />} />
90                                 </Routes>
91                                 <Footer />
92                         </UserContext.Provider>
93                 </AlttpBaseRomProvider>
94         </BrowserRouter>;
95 };
96
97 export default App;