1
- import { useSelector } from "@xstate/react"
2
1
import { FullScreenLoader } from "components/Loader/FullScreenLoader"
3
- import { RequirePermission } from "components/RequirePermission/RequirePermission"
4
2
import { TemplateLayout } from "components/TemplateLayout/TemplateLayout"
5
3
import { UsersLayout } from "components/UsersLayout/UsersLayout"
6
4
import IndexPage from "pages"
@@ -12,12 +10,9 @@ import { TemplateSettingsPage } from "pages/TemplateSettingsPage/TemplateSetting
12
10
import TemplatesPage from "pages/TemplatesPage/TemplatesPage"
13
11
import UsersPage from "pages/UsersPage/UsersPage"
14
12
import WorkspacesPage from "pages/WorkspacesPage/WorkspacesPage"
15
- import { FC , lazy , Suspense , useContext } from "react"
16
- import { Route , Routes } from "react-router-dom"
17
- import { selectPermissions } from "xServices/auth/authSelectors"
18
- import { selectFeatureVisibility } from "xServices/entitlements/entitlementsSelectors"
19
- import { XServiceContext } from "xServices/StateContext"
20
- import { DashboardLayout } from "./components/DashboardLayout/DashboardLayout"
13
+ import { FC , lazy , Suspense } from "react"
14
+ import { Route , Routes , BrowserRouter as Router } from "react-router-dom"
15
+ import { DashboardLayout } from "./components/Dashboard/DashboardLayout"
21
16
import { RequireAuth } from "./components/RequireAuth/RequireAuth"
22
17
import { SettingsLayout } from "./components/SettingsLayout/SettingsLayout"
23
18
import { DeploySettingsLayout } from "components/DeploySettingsLayout/DeploySettingsLayout"
@@ -123,135 +118,119 @@ const CreateTemplatePage = lazy(
123
118
)
124
119
125
120
export const AppRouter : FC = ( ) => {
126
- const xServices = useContext ( XServiceContext )
127
- const permissions = useSelector ( xServices . authXService , selectPermissions )
128
- const featureVisibility = useSelector (
129
- xServices . entitlementsXService ,
130
- selectFeatureVisibility ,
131
- )
132
-
133
121
return (
134
122
< Suspense fallback = { < FullScreenLoader /> } >
135
- < Routes >
136
- < Route path = "login" element = { < LoginPage /> } />
137
- < Route path = "setup" element = { < SetupPage /> } />
123
+ < Router >
124
+ < Routes >
125
+ < Route path = "login" element = { < LoginPage /> } />
126
+ < Route path = "setup" element = { < SetupPage /> } />
138
127
139
- { /* Dashboard routes */ }
140
- < Route element = { < RequireAuth /> } >
141
- < Route element = { < DashboardLayout /> } >
142
- < Route index element = { < IndexPage /> } />
128
+ { /* Dashboard routes */ }
129
+ < Route element = { < RequireAuth /> } >
130
+ < Route element = { < DashboardLayout /> } >
131
+ < Route index element = { < IndexPage /> } />
143
132
144
- < Route path = "gitauth" element = { < GitAuthPage /> } />
133
+ < Route path = "gitauth" element = { < GitAuthPage /> } />
145
134
146
- < Route path = "workspaces" element = { < WorkspacesPage /> } />
135
+ < Route path = "workspaces" element = { < WorkspacesPage /> } />
147
136
148
- < Route path = "starter-templates" >
149
- < Route index element = { < StarterTemplatesPage /> } />
150
- < Route path = ":exampleId" element = { < StarterTemplatePage /> } />
151
- </ Route >
137
+ < Route path = "starter-templates" >
138
+ < Route index element = { < StarterTemplatesPage /> } />
139
+ < Route path = ":exampleId" element = { < StarterTemplatePage /> } />
140
+ </ Route >
152
141
153
- < Route path = "templates" >
154
- < Route index element = { < TemplatesPage /> } />
155
- < Route path = "new" element = { < CreateTemplatePage /> } />
156
- < Route path = ":template" >
157
- < Route element = { < TemplateLayout /> } >
158
- < Route index element = { < TemplateSummaryPage /> } />
159
- < Route
160
- path = "permissions"
161
- element = { < TemplatePermissionsPage /> }
162
- />
142
+ < Route path = "templates" >
143
+ < Route index element = { < TemplatesPage /> } />
144
+ < Route path = "new" element = { < CreateTemplatePage /> } />
145
+ < Route path = ":template" >
146
+ < Route element = { < TemplateLayout /> } >
147
+ < Route index element = { < TemplateSummaryPage /> } />
148
+ < Route
149
+ path = "permissions"
150
+ element = { < TemplatePermissionsPage /> }
151
+ />
152
+ </ Route >
153
+
154
+ < Route path = "workspace" element = { < CreateWorkspacePage /> } />
155
+ < Route path = "settings" element = { < TemplateSettingsPage /> } />
156
+ < Route path = "versions" >
157
+ < Route path = ":version" element = { < TemplateVersionPage /> } />
158
+ </ Route >
163
159
</ Route >
160
+ </ Route >
164
161
165
- < Route path = "workspace" element = { < CreateWorkspacePage /> } />
166
- < Route path = "settings" element = { < TemplateSettingsPage /> } />
167
- < Route path = "versions" >
168
- < Route path = ":version" element = { < TemplateVersionPage /> } />
162
+ < Route path = "users" >
163
+ < Route element = { < UsersLayout /> } >
164
+ < Route index element = { < UsersPage /> } />
169
165
</ Route >
170
- </ Route >
171
- </ Route >
172
166
173
- < Route path = "users" >
174
- < Route element = { < UsersLayout /> } >
175
- < Route index element = { < UsersPage /> } />
167
+ < Route path = "create" element = { < CreateUserPage /> } />
176
168
</ Route >
177
169
178
- < Route path = "create" element = { < CreateUserPage /> } />
179
- </ Route >
170
+ < Route path = "/groups" >
171
+ < Route element = { < UsersLayout /> } >
172
+ < Route index element = { < GroupsPage /> } />
173
+ </ Route >
180
174
181
- < Route path = "/groups" >
182
- < Route element = { < UsersLayout /> } >
183
- < Route index element = { < GroupsPage /> } />
175
+ < Route path = "create" element = { < CreateGroupPage /> } />
176
+ < Route path = ":groupId" element = { < GroupPage /> } />
177
+ < Route
178
+ path = ":groupId/settings"
179
+ element = { < SettingsGroupPage /> }
180
+ />
184
181
</ Route >
185
182
186
- < Route path = "create" element = { < CreateGroupPage /> } />
187
- < Route path = ":groupId" element = { < GroupPage /> } />
188
- < Route path = ":groupId/settings" element = { < SettingsGroupPage /> } />
189
- </ Route >
183
+ < Route path = "/audit" element = { < AuditPage /> } />
190
184
191
- < Route path = "/audit" >
192
185
< Route
193
- index
194
- element = {
195
- < RequirePermission
196
- isFeatureVisible = {
197
- featureVisibility [ "audit_log" ] &&
198
- Boolean ( permissions ?. viewAuditLog )
199
- }
200
- >
201
- < AuditPage />
202
- </ RequirePermission >
203
- }
204
- />
205
- </ Route >
206
-
207
- < Route
208
- path = "/settings/deployment"
209
- element = { < DeploySettingsLayout /> }
210
- >
211
- < Route path = "general" element = { < GeneralSettingsPage /> } />
212
- < Route path = "security" element = { < SecuritySettingsPage /> } />
213
- < Route path = "appearance" element = { < AppearanceSettingsPage /> } />
214
- < Route path = "network" element = { < NetworkSettingsPage /> } />
215
- < Route path = "userauth" element = { < UserAuthSettingsPage /> } />
216
- < Route path = "gitauth" element = { < GitAuthSettingsPage /> } />
217
- </ Route >
186
+ path = "/settings/deployment"
187
+ element = { < DeploySettingsLayout /> }
188
+ >
189
+ < Route path = "general" element = { < GeneralSettingsPage /> } />
190
+ < Route path = "security" element = { < SecuritySettingsPage /> } />
191
+ < Route path = "appearance" element = { < AppearanceSettingsPage /> } />
192
+ < Route path = "network" element = { < NetworkSettingsPage /> } />
193
+ < Route path = "userauth" element = { < UserAuthSettingsPage /> } />
194
+ < Route path = "gitauth" element = { < GitAuthSettingsPage /> } />
195
+ </ Route >
218
196
219
- < Route path = "settings" element = { < SettingsLayout /> } >
220
- < Route path = "account" element = { < AccountPage /> } />
221
- < Route path = "security" element = { < SecurityPage /> } />
222
- < Route path = "ssh-keys" element = { < SSHKeysPage /> } />
223
- < Route path = "tokens" element = { < TokensPage /> } />
224
- </ Route >
197
+ < Route path = "settings" element = { < SettingsLayout /> } >
198
+ < Route path = "account" element = { < AccountPage /> } />
199
+ < Route path = "security" element = { < SecurityPage /> } />
200
+ < Route path = "ssh-keys" element = { < SSHKeysPage /> } />
201
+ < Route path = "tokens" element = { < TokensPage /> } />
202
+ </ Route >
225
203
226
- < Route path = "/@:username" >
227
- < Route path = ":workspace" >
228
- < Route index element = { < WorkspacePage /> } />
229
- < Route path = "schedule" element = { < WorkspaceSchedulePage /> } />
230
- < Route
231
- path = "builds/:buildNumber"
232
- element = { < WorkspaceBuildPage /> }
233
- />
234
- < Route
235
- path = "change-version"
236
- element = { < WorkspaceChangeVersionPage /> }
237
- />
204
+ < Route path = "/@:username" >
205
+ < Route path = ":workspace" >
206
+ < Route index element = { < WorkspacePage /> } />
207
+ < Route path = "schedule" element = { < WorkspaceSchedulePage /> } />
208
+ < Route
209
+ path = "builds/:buildNumber"
210
+ element = { < WorkspaceBuildPage /> }
211
+ />
212
+ < Route
213
+ path = "change-version"
214
+ element = { < WorkspaceChangeVersionPage /> }
215
+ />
216
+ </ Route >
238
217
</ Route >
239
218
</ Route >
240
- </ Route >
241
219
242
- { /* Terminal and CLI auth pages don't have the dashboard layout */ }
243
- < Route
244
- path = "/@:username/:workspace/terminal"
245
- element = { < TerminalPage /> }
246
- />
247
- < Route path = "cli-auth" element = { < CliAuthenticationPage /> } />
248
- </ Route >
220
+ { /* Terminal and CLI auth pages don't have the dashboard layout */ }
221
+ < Route
222
+ path = "/@:username/:workspace/terminal"
223
+ element = { < TerminalPage /> }
224
+ />
225
+ < Route path = "cli-auth" element = { < CliAuthenticationPage /> } />
226
+ </ Route >
249
227
250
- { /* Using path="*"" means "match anything", so this route
228
+ { /* Using path="*"" means "match anything", so this route
251
229
acts like a catch-all for URLs that we don't have explicit
252
230
routes for. */ }
253
- < Route path = "*" element = { < NotFoundPage /> } />
254
- </ Routes >
231
+ < Route path = "*" element = { < NotFoundPage /> } />
232
+ </ Routes >
233
+ </ Router >
255
234
</ Suspense >
256
235
)
257
236
}
0 commit comments