@@ -11,13 +11,20 @@ import TemplatesPage from "pages/TemplatesPage/TemplatesPage"
11
11
import UsersPage from "pages/UsersPage/UsersPage"
12
12
import WorkspacesPage from "pages/WorkspacesPage/WorkspacesPage"
13
13
import { FC , lazy , Suspense } from "react"
14
- import { Route , Routes , BrowserRouter as Router } from "react-router-dom"
14
+ import {
15
+ Route ,
16
+ Routes ,
17
+ BrowserRouter as Router ,
18
+ Outlet ,
19
+ } from "react-router-dom"
15
20
import { DashboardLayout } from "./components/Dashboard/DashboardLayout"
16
21
import { RequireAuth } from "./components/RequireAuth/RequireAuth"
17
22
import { SettingsLayout } from "./components/SettingsLayout/SettingsLayout"
18
23
import { DeploySettingsLayout } from "components/DeploySettingsLayout/DeploySettingsLayout"
19
24
import { TemplateSettingsLayout } from "pages/TemplateSettingsPage/TemplateSettingsLayout"
20
25
import { WorkspaceSettingsLayout } from "pages/WorkspaceSettingsPage/WorkspaceSettingsLayout"
26
+ import { DashboardProvider } from "components/Dashboard/DashboardProvider"
27
+ import { ProxyProvider } from "contexts/ProxyContext"
21
28
22
29
// Lazy load pages
23
30
// - Pages that are secondary, not in the main navigation or not usually accessed
@@ -170,129 +177,143 @@ export const AppRouter: FC = () => {
170
177
171
178
{ /* Dashboard routes */ }
172
179
< Route element = { < RequireAuth /> } >
173
- < Route element = { < DashboardLayout /> } >
174
- < Route index element = { < IndexPage /> } />
180
+ < Route element = { < AuthenticatedProviders /> } >
181
+ < Route element = { < DashboardLayout /> } >
182
+ < Route index element = { < IndexPage /> } />
175
183
176
- < Route path = "gitauth" element = { < GitAuthPage /> } />
184
+ < Route path = "gitauth" element = { < GitAuthPage /> } />
177
185
178
- < Route path = "workspaces" element = { < WorkspacesPage /> } />
186
+ < Route path = "workspaces" element = { < WorkspacesPage /> } />
179
187
180
- < Route path = "starter-templates" >
181
- < Route index element = { < StarterTemplatesPage /> } />
182
- < Route path = ":exampleId" element = { < StarterTemplatePage /> } />
183
- </ Route >
188
+ < Route path = "starter-templates" >
189
+ < Route index element = { < StarterTemplatesPage /> } />
190
+ < Route path = ":exampleId" element = { < StarterTemplatePage /> } />
191
+ </ Route >
184
192
185
- < Route path = "templates" >
186
- < Route index element = { < TemplatesPage /> } />
187
- < Route path = "new" element = { < CreateTemplatePage /> } />
188
- < Route path = ":template" >
189
- < Route element = { < TemplateLayout /> } >
190
- < Route index element = { < TemplateSummaryPage /> } />
191
- < Route path = "docs" element = { < TemplateDocsPage /> } />
192
- < Route path = "files" element = { < TemplateFilesPage /> } />
193
- < Route path = "versions" element = { < TemplateVersionsPage /> } />
194
- </ Route >
193
+ < Route path = "templates" >
194
+ < Route index element = { < TemplatesPage /> } />
195
+ < Route path = "new" element = { < CreateTemplatePage /> } />
196
+ < Route path = ":template" >
197
+ < Route element = { < TemplateLayout /> } >
198
+ < Route index element = { < TemplateSummaryPage /> } />
199
+ < Route path = "docs" element = { < TemplateDocsPage /> } />
200
+ < Route path = "files" element = { < TemplateFilesPage /> } />
201
+ < Route
202
+ path = "versions"
203
+ element = { < TemplateVersionsPage /> }
204
+ />
205
+ </ Route >
195
206
196
- < Route path = "workspace" element = { < CreateWorkspacePage /> } />
207
+ < Route path = "workspace" element = { < CreateWorkspacePage /> } />
197
208
198
- < Route path = "settings" element = { < TemplateSettingsLayout /> } >
199
- < Route index element = { < TemplateSettingsPage /> } />
200
- < Route
201
- path = "permissions"
202
- element = { < TemplatePermissionsPage /> }
203
- />
204
- < Route
205
- path = "variables"
206
- element = { < TemplateVariablesPage /> }
207
- />
208
- < Route path = "schedule" element = { < TemplateSchedulePage /> } />
209
- </ Route >
210
-
211
- < Route path = "versions" >
212
- < Route path = ":version" >
213
- < Route index element = { < TemplateVersionPage /> } />
209
+ < Route path = "settings" element = { < TemplateSettingsLayout /> } >
210
+ < Route index element = { < TemplateSettingsPage /> } />
214
211
< Route
215
- path = "edit"
216
- element = { < TemplateVersionEditorPage /> }
212
+ path = "permissions"
213
+ element = { < TemplatePermissionsPage /> }
214
+ />
215
+ < Route
216
+ path = "variables"
217
+ element = { < TemplateVariablesPage /> }
218
+ />
219
+ < Route
220
+ path = "schedule"
221
+ element = { < TemplateSchedulePage /> }
217
222
/>
218
223
</ Route >
219
- </ Route >
220
- </ Route >
221
- </ Route >
222
224
223
- < Route path = "users" >
224
- < Route element = { < UsersLayout /> } >
225
- < Route index element = { < UsersPage /> } />
225
+ < Route path = "versions" >
226
+ < Route path = ":version" >
227
+ < Route index element = { < TemplateVersionPage /> } />
228
+ < Route
229
+ path = "edit"
230
+ element = { < TemplateVersionEditorPage /> }
231
+ />
232
+ </ Route >
233
+ </ Route >
234
+ </ Route >
226
235
</ Route >
227
236
228
- < Route path = "create" element = { < CreateUserPage /> } />
229
- </ Route >
237
+ < Route path = "users" >
238
+ < Route element = { < UsersLayout /> } >
239
+ < Route index element = { < UsersPage /> } />
240
+ </ Route >
230
241
231
- < Route path = "/groups" >
232
- < Route element = { < UsersLayout /> } >
233
- < Route index element = { < GroupsPage /> } />
242
+ < Route path = "create" element = { < CreateUserPage /> } />
234
243
</ Route >
235
244
236
- < Route path = "create" element = { < CreateGroupPage /> } />
237
- < Route path = ":groupId" element = { < GroupPage /> } />
238
- < Route
239
- path = ":groupId/settings"
240
- element = { < SettingsGroupPage /> }
241
- />
242
- </ Route >
245
+ < Route path = "/groups" >
246
+ < Route element = { < UsersLayout /> } >
247
+ < Route index element = { < GroupsPage /> } />
248
+ </ Route >
243
249
244
- < Route path = "/audit" element = { < AuditPage /> } />
250
+ < Route path = "create" element = { < CreateGroupPage /> } />
251
+ < Route path = ":groupId" element = { < GroupPage /> } />
252
+ < Route
253
+ path = ":groupId/settings"
254
+ element = { < SettingsGroupPage /> }
255
+ />
256
+ </ Route >
245
257
246
- < Route
247
- path = "/settings/deployment"
248
- element = { < DeploySettingsLayout /> }
249
- >
250
- < Route path = "general" element = { < GeneralSettingsPage /> } />
251
- < Route path = "security" element = { < SecuritySettingsPage /> } />
252
- < Route path = "appearance" element = { < AppearanceSettingsPage /> } />
253
- < Route path = "network" element = { < NetworkSettingsPage /> } />
254
- < Route path = "userauth" element = { < UserAuthSettingsPage /> } />
255
- < Route path = "gitauth" element = { < GitAuthSettingsPage /> } />
256
- </ Route >
258
+ < Route path = "/audit" element = { < AuditPage /> } />
257
259
258
- < Route path = "settings" element = { < SettingsLayout /> } >
259
- < Route path = "account" element = { < AccountPage /> } />
260
- < Route path = "security" element = { < SecurityPage /> } />
261
- < Route path = "ssh-keys" element = { < SSHKeysPage /> } />
262
- < Route path = "tokens" >
263
- < Route index element = { < TokensPage /> } />
264
- < Route path = "new" element = { < CreateTokenPage /> } />
265
- </ Route >
266
260
< Route
267
- path = "workspace-proxies"
268
- element = { < WorkspaceProxyPage /> }
269
- />
270
- </ Route >
261
+ path = "/settings/deployment"
262
+ element = { < DeploySettingsLayout /> }
263
+ >
264
+ < Route path = "general" element = { < GeneralSettingsPage /> } />
265
+ < Route path = "security" element = { < SecuritySettingsPage /> } />
266
+ < Route
267
+ path = "appearance"
268
+ element = { < AppearanceSettingsPage /> }
269
+ />
270
+ < Route path = "network" element = { < NetworkSettingsPage /> } />
271
+ < Route path = "userauth" element = { < UserAuthSettingsPage /> } />
272
+ < Route path = "gitauth" element = { < GitAuthSettingsPage /> } />
273
+ </ Route >
271
274
272
- < Route path = "/@:username" >
273
- < Route path = ":workspace" >
274
- < Route index element = { < WorkspacePage /> } />
275
+ < Route path = "settings" element = { < SettingsLayout /> } >
276
+ < Route path = "account" element = { < AccountPage /> } />
277
+ < Route path = "security" element = { < SecurityPage /> } />
278
+ < Route path = "ssh-keys" element = { < SSHKeysPage /> } />
279
+ < Route path = "tokens" >
280
+ < Route index element = { < TokensPage /> } />
281
+ < Route path = "new" element = { < CreateTokenPage /> } />
282
+ </ Route >
275
283
< Route
276
- path = "builds/:buildNumber "
277
- element = { < WorkspaceBuildPage /> }
284
+ path = "workspace-proxies "
285
+ element = { < WorkspaceProxyPage /> }
278
286
/>
279
- < Route path = "settings" element = { < WorkspaceSettingsLayout /> } >
280
- < Route index element = { < WorkspaceSettingsPage /> } />
287
+ </ Route >
288
+
289
+ < Route path = "/@:username" >
290
+ < Route path = ":workspace" >
291
+ < Route index element = { < WorkspacePage /> } />
281
292
< Route
282
- path = "schedule "
283
- element = { < WorkspaceSchedulePage /> }
293
+ path = "builds/:buildNumber "
294
+ element = { < WorkspaceBuildPage /> }
284
295
/>
296
+ < Route
297
+ path = "settings"
298
+ element = { < WorkspaceSettingsLayout /> }
299
+ >
300
+ < Route index element = { < WorkspaceSettingsPage /> } />
301
+ < Route
302
+ path = "schedule"
303
+ element = { < WorkspaceSchedulePage /> }
304
+ />
305
+ </ Route >
285
306
</ Route >
286
307
</ Route >
287
308
</ Route >
288
- </ Route >
289
309
290
- { /* Terminal and CLI auth pages don't have the dashboard layout */ }
291
- < Route
292
- path = "/@:username/:workspace/terminal"
293
- element = { < TerminalPage /> }
294
- />
295
- < Route path = "cli-auth" element = { < CliAuthenticationPage /> } />
310
+ { /* Terminal and CLI auth pages don't have the dashboard layout */ }
311
+ < Route
312
+ path = "/@:username/:workspace/terminal"
313
+ element = { < TerminalPage /> }
314
+ />
315
+ < Route path = "cli-auth" element = { < CliAuthenticationPage /> } />
316
+ </ Route >
296
317
</ Route >
297
318
298
319
{ /* Using path="*"" means "match anything", so this route
@@ -304,3 +325,14 @@ export const AppRouter: FC = () => {
304
325
</ Suspense >
305
326
)
306
327
}
328
+
329
+ // AuthenticatedProviders are used
330
+ export const AuthenticatedProviders : FC = ( ) => {
331
+ return (
332
+ < DashboardProvider >
333
+ < ProxyProvider >
334
+ < Outlet />
335
+ </ ProxyProvider >
336
+ </ DashboardProvider >
337
+ )
338
+ }
0 commit comments