import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom'; import {useState, useEffect} from 'react'; import RegexPage from './components/regex/RegexPage'; import FormatPage from './components/format/FormatPage'; import ProfilePage from './components/profile/ProfilePage'; import SettingsPage from './components/settings/SettingsPage'; import SetupPage from './components/auth/SetupPage'; import LoginPage from './components/auth/LoginPage'; import Navbar from '@ui/Navbar'; import Footer from '@ui/Footer'; import {ToastContainer} from 'react-toastify'; import {checkSetupStatus} from '@api/auth'; import 'react-toastify/dist/ReactToastify.css'; function App() { const [darkMode, setDarkMode] = useState(true); const [authState, setAuthState] = useState({ checking: true, needsSetup: false, needsLogin: false, error: null }); // Prevent layout shifts from scrollbar useEffect(() => { document.body.style.overflowY = 'scroll'; return () => { document.body.style.overflowY = ''; }; }, []); useEffect(() => { if (darkMode) { document.documentElement.classList.add('dark'); } else { document.documentElement.classList.remove('dark'); } }, [darkMode]); useEffect(() => { const checkAuth = async () => { try { const status = await checkSetupStatus(); setAuthState({ checking: false, needsSetup: status.needsSetup, needsLogin: status.needsLogin, error: status.error }); } catch (error) { setAuthState({ checking: false, needsSetup: false, needsLogin: false, error: 'Unable to connect to server' }); } }; checkAuth(); }, []); if (authState.checking) { return ( <>
Loading...
); } if (authState.needsSetup) { return ( <> setAuthState({ ...authState, needsSetup: false, needsLogin: false }) } /> ); } if (authState.needsLogin) { return ( <> setAuthState({...authState, needsLogin: false}) } /> ); } return ( <>
} /> } /> } /> } /> } />
); } export default App;