import { BrowserRouter, Routes, Route, Navigate, Link } from 'react-router-dom'; import { useEffect, useState } from 'react'; import { LoginForm } from './components/LoginForm.tsx'; import { Layout } from './components/Layout.tsx'; import { ChatArea } from './components/ChatArea.tsx'; import { UserSettings } from './components/UserSettings.tsx'; import { BotManager } from './components/BotManager.tsx'; import { CommandManager } from './components/CommandManager.tsx'; import { RoleManager } from './components/RoleManager.tsx'; import { JoinServer } from './components/JoinServer.tsx'; import { DMChat } from './components/DMChat.tsx'; import { ForgotPasswordPage } from './components/ForgotPasswordPage.tsx'; import { ResetPasswordPage } from './components/ResetPasswordPage.tsx'; import { useAuthStore } from './stores/auth.ts'; import { useWebSocketStore } from './stores/ws.ts'; import { InstallBanner } from './components/InstallBanner.tsx'; import { ConnectionStatus } from './components/ConnectionStatus.tsx'; function ProtectedRoute({ children }: { children: React.ReactNode }) { const isAuthenticated = useAuthStore((state) => state.isAuthenticated); return isAuthenticated ? <>{children} : ; } function App() { const fetchMe = useAuthStore((state) => state.fetchMe); const isAuthenticated = useAuthStore((state) => state.isAuthenticated); const [init, setInit] = useState(false); useEffect(() => { fetchMe().finally(() => setInit(true)); }, [fetchMe]); // Connect WebSocket for real-time messages once authenticated useEffect(() => { if (isAuthenticated) { useWebSocketStore.getState().connect(); } }, [isAuthenticated]); if (!init) { return
Loading...
; } return ( } /> } /> } />
← [BACK] SETTINGS
} />
← [BACK] BOT MANAGER
} />
← [BACK] SLASH COMMANDS
} />
← [BACK] ROLE MANAGER
} /> } /> } > } /> } /> } /> } />
); } export default App;