App.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { useEffect } from 'react'
  2. import { Routes, Route, Navigate } from 'react-router-dom'
  3. import { useAuthStore } from './stores/authStore'
  4. import { wsClient } from './api/client'
  5. import Layout from './components/Layout'
  6. import LoginPage from './pages/LoginPage'
  7. import WorkflowsPage from './pages/WorkflowsPage'
  8. import WorkflowEditorPage from './pages/WorkflowEditorPage'
  9. import ExecutionsPage from './pages/ExecutionsPage'
  10. import ProjectsPage from './pages/ProjectsPage'
  11. import SettingsPage from './pages/SettingsPage'
  12. import NodesPage from './pages/NodesPage'
  13. import DatabasePage from './pages/DatabasePage'
  14. import CredentialsPage from './pages/CredentialsPage'
  15. import CertificatesPage from './pages/CertificatesPage'
  16. import UsersPage from './pages/UsersPage'
  17. function PrivateRoute({ children }: { children: React.ReactNode }) {
  18. const isAuthenticated = useAuthStore((state) => state.isAuthenticated)
  19. return isAuthenticated ? <>{children}</> : <Navigate to="/login" replace />
  20. }
  21. function App() {
  22. const isAuthenticated = useAuthStore((state) => state.isAuthenticated)
  23. // Connect WebSocket when app loads if already authenticated
  24. useEffect(() => {
  25. if (isAuthenticated) {
  26. wsClient.connect()
  27. }
  28. return () => {
  29. wsClient.disconnect()
  30. }
  31. }, [isAuthenticated])
  32. return (
  33. <Routes>
  34. <Route path="/login" element={<LoginPage />} />
  35. <Route
  36. path="/"
  37. element={
  38. <PrivateRoute>
  39. <Layout />
  40. </PrivateRoute>
  41. }
  42. >
  43. <Route index element={<Navigate to="/workflows" replace />} />
  44. <Route path="workflows" element={<WorkflowsPage />} />
  45. <Route path="workflows/:id" element={<WorkflowEditorPage />} />
  46. <Route path="executions" element={<ExecutionsPage />} />
  47. <Route path="nodes" element={<NodesPage />} />
  48. <Route path="credentials" element={<CredentialsPage />} />
  49. <Route path="certificates" element={<CertificatesPage />} />
  50. <Route path="database" element={<DatabasePage />} />
  51. <Route path="projects" element={<ProjectsPage />} />
  52. <Route path="users" element={<UsersPage />} />
  53. <Route path="settings" element={<SettingsPage />} />
  54. </Route>
  55. </Routes>
  56. )
  57. }
  58. export default App