App.tsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { Toaster } from "@/components/ui/sonner";
  2. import { TooltipProvider } from "@/components/ui/tooltip";
  3. import NotFound from "@/pages/NotFound";
  4. import { Route, Switch } from "wouter";
  5. import ErrorBoundary from "./components/ErrorBoundary";
  6. import { ThemeProvider } from "./contexts/ThemeContext";
  7. import DashboardLayout from "./components/DashboardLayout";
  8. import Home from "./pages/Home";
  9. import Login from "./pages/Login";
  10. import Register from "./pages/Register";
  11. import ForgotPassword from "./pages/ForgotPassword";
  12. import ResetPassword from "./pages/ResetPassword";
  13. import AgentDashboard from "./pages/AgentDashboard";
  14. import WorkflowDesigner from "./pages/WorkflowDesigner";
  15. import UserManagement from "./pages/UserManagement";
  16. import AcceptInvite from "./pages/AcceptInvite";
  17. import Playground from "./pages/Playground";
  18. import Analytics from "./pages/Analytics";
  19. import DataSources from "./pages/DataSources";
  20. function Router() {
  21. return (
  22. <Switch>
  23. {/* Public pages */}
  24. <Route path={"/"} component={Home} />
  25. <Route path={"/login"} component={Login} />
  26. <Route path={"/register"} component={Register} />
  27. <Route path={"/forgot-password"} component={ForgotPassword} />
  28. <Route path={"/reset-password/:token"} component={ResetPassword} />
  29. <Route path="/invite/:token" component={AcceptInvite} />
  30. {/* Protected pages — DashboardLayout handles auth gating */}
  31. <Route path={"/dashboard"}>
  32. <DashboardLayout requiredRole="agent">
  33. <AgentDashboard />
  34. </DashboardLayout>
  35. </Route>
  36. <Route path={"/dashboard/users"}>
  37. <DashboardLayout requiredRole="admin">
  38. <UserManagement />
  39. </DashboardLayout>
  40. </Route>
  41. <Route path={"/workflow-designer"}>
  42. <DashboardLayout requiredRole="admin">
  43. <WorkflowDesigner />
  44. </DashboardLayout>
  45. </Route>
  46. <Route path={"/playground"}>
  47. <DashboardLayout requiredRole="agent">
  48. <Playground />
  49. </DashboardLayout>
  50. </Route>
  51. <Route path={"/analytics"}>
  52. <DashboardLayout requiredRole="admin">
  53. <Analytics />
  54. </DashboardLayout>
  55. </Route>
  56. <Route path={"/data-sources"}>
  57. <DashboardLayout requiredRole="admin">
  58. <DataSources />
  59. </DashboardLayout>
  60. </Route>
  61. <Route path={"/404"} component={NotFound} />
  62. {/* Final fallback route */}
  63. <Route component={NotFound} />
  64. </Switch>
  65. );
  66. }
  67. function App() {
  68. return (
  69. <ErrorBoundary>
  70. <ThemeProvider defaultTheme="light">
  71. <TooltipProvider>
  72. <Toaster />
  73. <Router />
  74. </TooltipProvider>
  75. </ThemeProvider>
  76. </ErrorBoundary>
  77. );
  78. }
  79. export default App;