import React, { useEffect } from "react"; import { BrowserRouter as Router, Routes, Route, Navigate } from "react-router"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; import { Toaster } from "@/components/ui/sonner"; import AppLayout from "@/components/layout/AppLayout"; import LoginPage from "@/pages/LoginPage"; import ChatPage from "@/pages/ChatPage"; import SettingsPage from "@/pages/SettingsPage"; import NotFoundPage from "@/pages/NotFoundPage"; import { useAuthStore } from "@/stores/authStore"; import { useUiStore } from "@/stores/uiStore"; import ErrorBoundary from "@/components/common/ErrorBoundary"; // Create a client const queryClient = new QueryClient({ defaultOptions: { queries: { staleTime: 1000 * 60 * 5, // 5 minutes refetchOnWindowFocus: false, retry: (failureCount, error: any) => { if (error?.status === 401) return false; return failureCount < 3; }, }, }, }); // Protected Route wrapper const ProtectedRoute: React.FC<{ children: React.ReactNode }> = ({ children, }) => { // const { isAuthenticated } = useAuthStore(); // if (!isAuthenticated) { // return ; // } return <>{children}; }; function App() { const { theme } = useUiStore(); // Apply theme to document useEffect(() => { document.documentElement.classList.toggle("dark", theme === "dark"); }, [theme]); return (
{/* Auth routes */} } /> {/* Protected routes with layout */} // } > {/* Default redirect to channels */} } /> {/* Chat routes */} } /> } /> } /> } /> {/* Settings */} } /> } /> {/* 404 */} } />
{/* Dev tools - only in development */} {/*process.env.NODE_ENV === "development" && */} {/* Toast notifications */}
); } export default App;