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