import { Toaster } from "@/components/ui/toaster"; import { Toaster as Sonner } from "@/components/ui/sonner"; import { TooltipProvider } from "@/components/ui/tooltip"; import { ThemeProvider } from "@/components/theme-provider"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom"; import { useEffect, useState } from "react"; import { useIsMobile } from "@/hooks/use-mobile"; import Index from "./pages/Index"; import Login from "./pages/Login"; import NotFound from "./pages/NotFound"; import MobileDashboard from "./pages/mobile/MobileDashboard"; import CalendarPage from "./pages/mobile/CalendarPage"; import NotesPage from "./pages/mobile/NotesPage"; import NoteDetailPage from "./pages/mobile/NoteDetailPage"; import TodosPage from "./pages/mobile/TodosPage"; import RssPage from "./pages/mobile/RssPage"; import SettingsPage from "./pages/mobile/SettingsPage"; import AuthService from "./services/AuthService"; import "./globals.css"; const queryClient = new QueryClient(); // Protected Route Component const ProtectedRoute = ({ children }: { children: React.ReactNode }) => { const isAuthenticated = AuthService.isAuthenticated(); if (!isAuthenticated) { return ; } return <>{children}; }; // Auto-redirect component based on device const AutoRedirect = () => { const isMobile = useIsMobile(); if (isMobile === undefined) { // Still detecting, show loading return (
); } return ; }; const App = () => { const [isLoading, setIsLoading] = useState(true); useEffect(() => { const checkAuth = async () => { try { if (AuthService.getToken()) { await AuthService.checkTokenValidity(); } } catch (error) { console.error("Error checking token validity:", error); } finally { setIsLoading(false); } }; checkAuth(); }, []); if (isLoading) { return (
); } return ( } /> {/* Auto-redirect root to mobile or desktop */} } /> {/* Desktop route */} } /> {/* Mobile routes */} } > } /> } /> } /> } /> } /> } /> } /> ); }; export default App;