Skip to content

Commit 9a267d6

Browse files
committed
Improve error handling
1 parent c7376ea commit 9a267d6

File tree

4 files changed

+43
-34
lines changed

4 files changed

+43
-34
lines changed

site/src/i18n/en/workspaceSchedulePage.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
{
22
"forbiddenError": "You don't have permissions to update the schedule for this workspace.",
3-
"getWorkspaceError": "Failed to fetch workspace.",
4-
"checkPermissionsError": "Failed to fetch permissions.",
53
"dialogTitle": "Restart workspace?",
64
"dialogDescription": "Would you like to restart your workspace now to apply your new auto-stop setting, or let it apply after your next workspace start?",
75
"restart": "Restart workspace now",

site/src/pages/WorkspaceSchedulePage/WorkspaceSchedulePage.test.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@ import {
1919
WorkspaceScheduleFormValues,
2020
Language as FormLanguage,
2121
} from "../../components/WorkspaceScheduleForm/WorkspaceScheduleForm"
22-
import {
23-
WorkspaceSchedulePage,
24-
} from "./WorkspaceSchedulePage"
22+
import { WorkspaceSchedulePage } from "./WorkspaceSchedulePage"
2523
import i18next from "i18next"
2624

2725
const { t } = i18next

site/src/pages/WorkspaceSchedulePage/WorkspaceSchedulePage.tsx

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
import { makeStyles } from "@material-ui/core/styles"
12
import { useMachine } from "@xstate/react"
23
import { AlertBanner } from "components/AlertBanner/AlertBanner"
34
import { ConfirmDialog } from "components/Dialogs/ConfirmDialog/ConfirmDialog"
5+
import { Margins } from "components/Margins/Margins"
46
import { scheduleToAutoStart } from "pages/WorkspaceSchedulePage/schedule"
57
import { ttlMsToAutoStop } from "pages/WorkspaceSchedulePage/ttl"
68
import React, { useEffect } from "react"
@@ -22,8 +24,15 @@ const getAutoStart = (workspace?: TypesGen.Workspace) =>
2224
const getAutoStop = (workspace?: TypesGen.Workspace) =>
2325
ttlMsToAutoStop(workspace?.ttl_ms)
2426

27+
const useStyles = makeStyles((theme) => ({
28+
topMargin: {
29+
marginTop: `${theme.spacing(3)}px`,
30+
},
31+
}))
32+
2533
export const WorkspaceSchedulePage: React.FC = () => {
2634
const { t } = useTranslation("workspaceSchedulePage")
35+
const styles = useStyles()
2736
const { username: usernameQueryParam, workspace: workspaceQueryParam } =
2837
useParams()
2938
const navigate = useNavigate()
@@ -34,6 +43,7 @@ export const WorkspaceSchedulePage: React.FC = () => {
3443
checkPermissionsError,
3544
submitScheduleError,
3645
getWorkspaceError,
46+
getTemplateError,
3747
permissions,
3848
workspace,
3949
} = scheduleState.context
@@ -51,34 +61,37 @@ export const WorkspaceSchedulePage: React.FC = () => {
5161
}
5262

5363
if (
54-
scheduleState.matches("idle") ||
55-
scheduleState.matches("gettingWorkspace") ||
56-
scheduleState.matches("gettingPermissions") ||
57-
scheduleState.matches("gettingTemplate") ||
58-
!workspace
64+
scheduleState.hasTag("loading")
5965
) {
6066
return <FullScreenLoader />
6167
}
6268

6369
if (scheduleState.matches("error")) {
6470
return (
65-
<AlertBanner
66-
severity="error"
67-
error={getWorkspaceError || checkPermissionsError}
68-
text={
69-
getWorkspaceError
70-
? t("getWorkspaceError")
71-
: t("checkPermissionsError")
72-
}
73-
retry={() =>
74-
scheduleSend({ type: "GET_WORKSPACE", username, workspaceName })
75-
}
76-
/>
71+
<Margins>
72+
<div className={styles.topMargin}>
73+
<AlertBanner
74+
severity="error"
75+
error={
76+
getWorkspaceError || checkPermissionsError || getTemplateError
77+
}
78+
retry={() =>
79+
scheduleSend({ type: "GET_WORKSPACE", username, workspaceName })
80+
}
81+
/>
82+
</div>
83+
</Margins>
7784
)
7885
}
7986

8087
if (!permissions?.updateWorkspace) {
81-
return <AlertBanner severity="error" error={Error(t("forbiddenError"))} />
88+
return (
89+
<Margins>
90+
<div className={styles.topMargin}>
91+
<AlertBanner severity="error" error={Error(t("forbiddenError"))} />
92+
</div>
93+
</Margins>
94+
)
8295
}
8396

8497
if (
@@ -129,11 +142,7 @@ export const WorkspaceSchedulePage: React.FC = () => {
129142
}
130143

131144
if (scheduleState.matches("done")) {
132-
return (
133-
<Navigate
134-
to={`/@${username}/${workspaceName}`}
135-
/>
136-
)
145+
return <Navigate to={`/@${username}/${workspaceName}`} />
137146
}
138147

139148
// Theoretically impossible - log and bail

site/src/xServices/workspaceSchedule/workspaceScheduleXService.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export const workspaceSchedule =
6969
services: {} as {
7070
getWorkspace: {
7171
data: TypesGen.Workspace
72-
},
72+
}
7373
getTemplate: {
7474
data: TypesGen.Template
7575
}
@@ -117,6 +117,7 @@ export const workspaceSchedule =
117117
},
118118
],
119119
},
120+
tags: "loading"
120121
},
121122
gettingTemplate: {
122123
entry: "clearGetTemplateError",
@@ -200,13 +201,13 @@ export const workspaceSchedule =
200201
checkPermissionsError: (_, event) => event.data,
201202
}),
202203
assignTemplate: assign({
203-
template: (_, event) => event.data
204+
template: (_, event) => event.data,
204205
}),
205206
assignGetTemplateError: assign({
206-
getTemplateError: (_, event) => event.data
207+
getTemplateError: (_, event) => event.data,
207208
}),
208209
clearGetTemplateError: assign({
209-
getTemplateError: (_) => undefined
210+
getTemplateError: (_) => undefined,
210211
}),
211212
assignAutoStopChanged: assign({
212213
autoStopChanged: (_, event) => event.autoStopChanged,
@@ -224,9 +225,12 @@ export const workspaceSchedule =
224225
// user can return to the workspace page to see the restart
225226
restartWorkspace: (context) => {
226227
if (context.workspace && context.template) {
227-
return API.startWorkspace(context.workspace.id, context.template.active_version_id)
228+
return API.startWorkspace(
229+
context.workspace.id,
230+
context.template.active_version_id,
231+
)
228232
}
229-
}
233+
},
230234
},
231235

232236
services: {

0 commit comments

Comments
 (0)