Repository navigation
Expand file tree
/
Copy pathApp.tsx
More file actions
124 lines (121 loc) · 3.51 KB
/
Copy pathApp.tsx
File metadata and controls
124 lines (121 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import { Routes, Route } from "react-router";
import { Layout } from "./components/Layout";
import { AppShell } from "./components/shell/AppShell";
import { ChatAppShell } from "./components/shell/ChatAppShell";
import { ProtectedRoute } from "./components/ProtectedRoute";
import { Landing } from "./pages/Landing";
import { Register } from "./pages/Register";
import { Login } from "./pages/Login";
import { Dashboard } from "./pages/Dashboard";
import { Settings } from "./pages/Settings";
import { Updates } from "./pages/Updates";
import { UpdatesPage } from "./pages/UpdatesPage";
import { Activation } from "./pages/Activation";
import { Onboarding } from "./pages/Onboarding";
import { OnboardingNotifications } from "./pages/OnboardingNotifications";
import { ChatThread } from "./pages/ChatThread";
import { Notifications } from "./pages/Notifications";
import { Admin } from "./pages/Admin";
import { Spark } from "./pages/Spark";
import { useVisualViewport } from "./hooks/useVisualViewport";
export function App() {
useVisualViewport();
return (
<Routes>
{/* Auth / public pages keep top-nav Layout */}
<Route element={<Layout />}>
<Route path="/" element={<Landing />} />
<Route path="/register" element={<Register />} />
<Route path="/login" element={<Login />} />
<Route
path="/admin"
element={
<ProtectedRoute requiredRole="admin">
<Admin />
</ProtectedRoute>
}
/>
<Route
path="/p/:projectId/activate"
element={
<ProtectedRoute>
<Activation />
</ProtectedRoute>
}
/>
<Route
path="/p/:projectId/onboarding"
element={
<ProtectedRoute>
<Onboarding />
</ProtectedRoute>
}
/>
<Route
path="/p/:projectId/onboarding/notifications"
element={
<ProtectedRoute>
<OnboardingNotifications />
</ProtectedRoute>
}
/>
<Route
path="/p/:projectId/notifications"
element={
<ProtectedRoute>
<Notifications />
</ProtectedRoute>
}
/>
<Route
path="/p/:projectId/updates"
element={
<ProtectedRoute>
<UpdatesPage />
</ProtectedRoute>
}
/>
</Route>
{/* App pages with responsive shell (bottom nav or side rail) */}
<Route element={<AppShell />}>
<Route
path="/dashboard"
element={
<ProtectedRoute>
<Dashboard />
</ProtectedRoute>
}
/>
<Route
path="/updates"
element={
<ProtectedRoute>
<Updates />
</ProtectedRoute>
}
/>
<Route
path="/settings"
element={
<ProtectedRoute>
<Settings />
</ProtectedRoute>
}
/>
{/* Spark is an unauthenticated public prototype: no login required. */}
<Route path="/spark" element={<Spark />} />
</Route>
{/* Chat with responsive shell (immersive or split view) */}
<Route element={<ChatAppShell />}>
<Route
path="/p/:projectId/chat"
element={
<ProtectedRoute>
<ChatThread />
</ProtectedRoute>
}
/>
</Route>
</Routes>
);
}