import React, { useEffect } from 'react'; import { Routes, Route, Navigate } from 'react-router-dom'; import { Toaster } from 'react-hot-toast'; import { useAuthStore, useUIStore } from '@/lib/store'; import Layout from '@/components/Layout'; import Dashboard from '@/pages/Dashboard'; import Agents from '@/pages/Agents'; import Updates from '@/pages/Updates'; import Docker from '@/pages/Docker'; import LiveOperations from '@/pages/LiveOperations'; import History from '@/pages/History'; import Settings from '@/pages/Settings'; import TokenManagement from '@/pages/TokenManagement'; import RateLimiting from '@/pages/RateLimiting'; import Login from '@/pages/Login'; // Protected route component const ProtectedRoute: React.FC<{ children: React.ReactNode }> = ({ children }) => { const { isAuthenticated } = useAuthStore(); if (!isAuthenticated) { return ; } return <>{children}; }; const App: React.FC = () => { const { isAuthenticated, token } = useAuthStore(); const { theme } = useUIStore(); // Apply theme to document useEffect(() => { if (theme === 'dark') { document.documentElement.classList.add('dark'); } else { document.documentElement.classList.remove('dark'); } }, [theme]); // Check for existing token on app start useEffect(() => { const storedToken = localStorage.getItem('auth_token'); if (storedToken && !token) { useAuthStore.getState().setToken(storedToken); } }, [token]); return (
{/* Toast notifications */} {/* App routes */} {/* Login route */} : } /> {/* Protected routes */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } />
); }; export default App;