Spaces:
Runtime error
Runtime error
| import { Switch, Route, Router as WouterRouter, useLocation } from "wouter"; | |
| import { AuthProvider, useAuth } from "@/context/AuthContext"; | |
| import Login from "@/pages/Login"; | |
| import Signup from "@/pages/Signup"; | |
| import ForgotPassword from "@/pages/ForgotPassword"; | |
| import ResetPassword from "@/pages/ResetPassword"; | |
| import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; | |
| import { Toaster } from "@/components/ui/toaster"; | |
| import { Toaster as SonnerToaster } from "@/components/ui/sonner"; | |
| import { TooltipProvider } from "@/components/ui/tooltip"; | |
| import { ThemeProvider } from "@/components/theme-provider"; | |
| import { Layout } from "@/components/layout"; | |
| import NotFound from "@/pages/not-found"; | |
| import Dashboard from "@/pages/dashboard"; | |
| import Projects from "@/pages/projects"; | |
| import ProjectDetail from "@/pages/project-detail"; | |
| import Clients from "@/pages/clients"; | |
| import Briefs from "@/pages/briefs"; | |
| import Kanban from "@/pages/kanban"; | |
| const queryClient = new QueryClient(); | |
| function ProtectedRoute({ component: Component, ...rest }: any) { | |
| const { session, isLoading } = useAuth(); | |
| const [, setLocation] = useLocation(); | |
| if (isLoading) { | |
| return <div className="min-h-screen flex items-center justify-center">Loading...</div>; | |
| } | |
| if (!session) { | |
| setLocation("/login"); | |
| return null; | |
| } | |
| return ( | |
| <Layout> | |
| <Component {...rest} /> | |
| </Layout> | |
| ); | |
| } | |
| function Router() { | |
| return ( | |
| <Switch> | |
| <Route path="/login" component={Login} /> | |
| <Route path="/signup" component={Signup} /> | |
| <Route path="/forgot-password" component={ForgotPassword} /> | |
| <Route path="/reset-password" component={ResetPassword} /> | |
| <Route path="/"> | |
| <ProtectedRoute component={Dashboard} /> | |
| </Route> | |
| <Route path="/kanban"> | |
| <ProtectedRoute component={Kanban} /> | |
| </Route> | |
| <Route path="/projects"> | |
| <ProtectedRoute component={Projects} /> | |
| </Route> | |
| <Route path="/projects/:id"> | |
| <ProtectedRoute component={ProjectDetail} /> | |
| </Route> | |
| <Route path="/clients"> | |
| <ProtectedRoute component={Clients} /> | |
| </Route> | |
| <Route path="/briefs"> | |
| <ProtectedRoute component={Briefs} /> | |
| </Route> | |
| <Route> | |
| <Layout> | |
| <NotFound /> | |
| </Layout> | |
| </Route> | |
| </Switch> | |
| ); | |
| } | |
| function App() { | |
| return ( | |
| <ThemeProvider defaultTheme="dark" storageKey="design-studio-theme"> | |
| <QueryClientProvider client={queryClient}> | |
| <TooltipProvider> | |
| <AuthProvider> | |
| <WouterRouter base={import.meta.env.BASE_URL.replace(/\/$/, "")}> | |
| <Router /> | |
| </WouterRouter> | |
| <Toaster /> | |
| <SonnerToaster /> | |
| </AuthProvider> | |
| </TooltipProvider> | |
| </QueryClientProvider> | |
| </ThemeProvider> | |
| ); | |
| } | |
| export default App; | |