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';
7 import FullLayout from './FullLayout';
8 import AlttpSeed from '../pages/AlttpSeed';
9 import DoorsTracker from '../pages/DoorsTracker';
10 import Front from '../pages/Front';
11 import Map from '../pages/Map';
12 import Schedule from '../pages/Schedule';
13 import Technique from '../pages/Technique';
14 import Techniques from '../pages/Techniques';
15 import Tournament from '../pages/Tournament';
16 import User from '../pages/User';
17 import AlttpBaseRomProvider from '../../helpers/AlttpBaseRomContext';
18 import UserContext from '../../helpers/UserContext';
19 import i18n from '../../i18n';
22 const [user, setUser] = useState(null);
24 const { t } = useTranslation();
26 const checkAuth = async () => {
28 const response = await axios.get('/api/user');
29 setUser(response.data);
35 const doLogout = async () => {
36 await axios.post('/logout');
43 .get('/sanctum/csrf-cookie')
46 timer = setInterval(checkAuth, 15 * 60 * 1000);
49 if (timer) clearInterval(timer);
54 window.Echo.channel('App.Control')
55 .listen('PleaseRefresh', () => {
59 window.Echo.leave('App.Control');
63 return <BrowserRouter>
64 <AlttpBaseRomProvider>
65 <UserContext.Provider value={user}>
67 <html lang={i18n.language} />
68 <title>{t('general.appName')}</title>
69 <meta name="description" content={t('general.appDescription')} />
72 <Route element={<FullLayout doLogout={doLogout} />}>
75 element={<Techniques namespace="dungeons" type="dungeon" />}
79 element={<Technique namespace="dungeons" type="dungeon" />}
81 <Route path="h/:hash" element={<AlttpSeed />} />
84 element={<Techniques namespace="locations" type="location" />}
87 path="locations/:name"
88 element={<Technique namespace="locations" type="location" />}
91 <Route index element={<Navigate replace to="lw" />} />
92 <Route path=":activeMap" element={<Map />} />
96 element={<Techniques namespace="modes" type="mode" />}
100 element={<Technique namespace="modes" type="mode" />}
104 element={<Techniques namespace="rulesets" type="ruleset" />}
107 path="rulesets/:name"
108 element={<Technique namespace="rulesets" type="ruleset" />}
110 <Route path="schedule" element={<Schedule />} />
113 element={<Techniques namespace="techniques" type="tech" />}
117 element={<Technique namespace="techniques" type="tech" />}
119 <Route path="tournaments/:id" element={<Tournament />} />
120 <Route path="users/:id" element={<User />} />
121 <Route path="/" element={<Front />} />
122 <Route path="*" element={<Navigate to="/" />} />
126 element={<DoorsTracker />}
129 </UserContext.Provider>
130 </AlttpBaseRomProvider>