]> git.localhorst.tv Git - alttp.git/blobdiff - resources/js/components/App.js
add plain maps
[alttp.git] / resources / js / components / App.js
index a4d02b12aa40a8f4ce85b39e8fb3278849d0a22a..d84474cfc65da9c1a2e628f5513c20d457ece183 100644 (file)
@@ -1,18 +1,98 @@
 import axios from 'axios';
-import React, { useEffect } from 'react';
-import { BrowserRouter, Route, Routes } from 'react-router-dom';
+import React, { useEffect, useState } from 'react';
+import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom';
 
+import Footer from './common/Footer';
+import Header from './common/Header';
+import AlttpSeed from './pages/AlttpSeed';
 import Front from './pages/Front';
+import Map from './pages/Map';
+import Technique from './pages/Technique';
+import Techniques from './pages/Techniques';
+import Tournament from './pages/Tournament';
+import User from './pages/User';
+import AlttpBaseRomProvider from '../helpers/AlttpBaseRomContext';
+import UserContext from '../helpers/UserContext';
 
 const App = () => {
+       const [user, setUser] = useState(null);
+
+       const checkAuth = async () => {
+               try {
+                       const response = await axios.get('/api/user');
+                       setUser(response.data);
+               } catch (e) {
+                       setUser(null);
+               }
+       };
+
+       const doLogout = async () => {
+               await axios.post('/logout');
+               await checkAuth();
+       };
+
+       useEffect(() => {
+               let timer = null;
+               axios
+                       .get('/sanctum/csrf-cookie')
+                       .then(() => {
+                               checkAuth();
+                               timer = setInterval(checkAuth, 15 * 60 * 1000);
+                       });
+               return () => {
+                       if (timer) clearInterval(timer);
+               };
+       }, []);
+
        useEffect(() => {
-               axios.get('/sanctum/csrf-cookie');
+               window.Echo.channel('App.Control')
+                       .listen('PleaseRefresh', () => {
+                               location.reload();
+                       });
+               return () => {
+                       window.Echo.leave('App.Control');
+               };
        }, []);
 
        return <BrowserRouter>
-               <Routes>
-                       <Route path="*" element={<Front />} />
-               </Routes>
+               <AlttpBaseRomProvider>
+                       <UserContext.Provider value={user}>
+                               <Header doLogout={doLogout} />
+                               <Routes>
+                                       <Route path="h/:hash" element={<AlttpSeed />} />
+                                       <Route path="map" element={<Map />} />
+                                       <Route
+                                               path="modes"
+                                               element={<Techniques namespace="modes" type="mode" />}
+                                       />
+                                       <Route
+                                               path="modes/:name"
+                                               element={<Technique namespace="modes" type="mode" />}
+                                       />
+                                       <Route
+                                               path="rulesets"
+                                               element={<Techniques namespace="rulesets" type="ruleset" />}
+                                               />
+                                       <Route
+                                               path="rulesets/:name"
+                                               element={<Technique namespace="rulesets" type="ruleset" />}
+                                       />
+                                       <Route
+                                               path="tech"
+                                               element={<Techniques namespace="techniques" type="tech" />}
+                                       />
+                                       <Route
+                                               path="tech/:name"
+                                               element={<Technique namespace="techniques" type="tech" />}
+                                       />
+                                       <Route path="tournaments/:id" element={<Tournament />} />
+                                       <Route path="users/:id" element={<User />} />
+                                       <Route path="/" element={<Front />} />
+                                       <Route path="*" element={<Navigate to="/" />} />
+                               </Routes>
+                               <Footer />
+                       </UserContext.Provider>
+               </AlttpBaseRomProvider>
        </BrowserRouter>;
 };