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