import React, { useEffect } from "react"; import { Routes, Route, Navigate, useNavigate } from "react-router-dom"; import { ToastContainer } from "react-toastify"; import "react-toastify/dist/ReactToastify.css"; import { AuthContext, useAuthProvider } from "./hooks/useAuth"; import { ThemeProvider, useTheme } from "./hooks/useTheme"; import { Layout } from "./components/Layout"; import { Login } from "./pages/Login"; import { Overview } from "./pages/Overview"; import { Dashboard } from "./pages/Dashboard"; import { PreviewDetail } from "./pages/PreviewDetail"; import { Settings } from "./pages/Settings"; import { Repos } from "./pages/Repos"; import { RepoConfig } from "./pages/RepoConfig"; import { Admin } from "./pages/Admin"; import { SetupWizard } from "./pages/SetupWizard"; import { Privacy } from "./pages/Privacy"; import { Loader2 } from "lucide-react"; function ProtectedRoute({ children }: { children: React.ReactNode }) { const { user, loading } = React.useContext(AuthContext); const navigate = useNavigate(); useEffect(() => { if (!loading && !user) navigate("/login"); }, [user, loading, navigate]); if (loading) return (
); if (!user) return null; return <>{children}; } function SetupCheck({ children }: { children: React.ReactNode }) { const { user } = React.useContext(AuthContext); const navigate = useNavigate(); useEffect(() => { if (user && !user.setupComplete) { const path = window.location.pathname; if (path !== "/setup" && path !== "/settings" && path !== "/privacy") { navigate("/setup"); } } }, [user, navigate]); return <>{children}; } function AppContent({ auth }: { auth: ReturnType }) { const { resolvedTheme } = useTheme(); return ( : } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); } export default function App() { const auth = useAuthProvider(); return ( ); }