Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit fccacfe

Browse files
committed
Merge status checking from workspace page
1 parent 191c9d7 commit fccacfe

File tree

5 files changed

+60
-46
lines changed

5 files changed

+60
-46
lines changed

site/src/components/Workspace/Workspace.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { makeStyles } from "@material-ui/core/styles"
22
import Typography from "@material-ui/core/Typography"
33
import React from "react"
44
import * as TypesGen from "../../api/typesGenerated"
5-
import { WorkspaceStatus } from "../../pages/WorkspacePage/WorkspacePage"
5+
import { WorkspaceStatus } from "../../util/workspace"
66
import { WorkspaceSchedule } from "../WorkspaceSchedule/WorkspaceSchedule"
77
import { WorkspaceSection } from "../WorkspaceSection/WorkspaceSection"
88
import { WorkspaceStatusBar } from "../WorkspaceStatusBar/WorkspaceStatusBar"

site/src/components/WorkspaceStatusBar/WorkspaceStatusBar.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ export const Language = {
2121
stopped: "Stopped",
2222
starting: "Building",
2323
stopping: "Stopping",
24+
canceled: "Canceled",
25+
queued: "Queued",
2426
error: "Build Failed",
2527
loading: "Loading Status",
2628
deleting: "Deleting",

site/src/pages/WorkspacePage/WorkspacePage.tsx

+4-13
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,8 @@ import { Margins } from "../../components/Margins/Margins"
77
import { Stack } from "../../components/Stack/Stack"
88
import { Workspace } from "../../components/Workspace/Workspace"
99
import { firstOrItem } from "../../util/array"
10+
import { getWorkspaceStatus } from "../../util/workspace"
1011
import { XServiceContext } from "../../xServices/StateContext"
11-
import { selectWorkspaceStatus } from "../../xServices/workspace/workspaceSelectors"
12-
13-
export type WorkspaceStatus =
14-
| "started"
15-
| "starting"
16-
| "stopped"
17-
| "stopping"
18-
| "error"
19-
| "loading"
20-
| "deleting"
21-
| "deleted"
22-
| "canceling"
2312

2413
export const WorkspacePage: React.FC = () => {
2514
const { workspace: workspaceQueryParam } = useParams()
@@ -29,7 +18,9 @@ export const WorkspacePage: React.FC = () => {
2918
const [workspaceState, workspaceSend] = useActor(xServices.workspaceXService)
3019
const { workspace, template, organization, getWorkspaceError, getTemplateError, getOrganizationError } =
3120
workspaceState.context
32-
const workspaceStatus = useSelector(xServices.workspaceXService, selectWorkspaceStatus)
21+
const workspaceStatus = useSelector(xServices.workspaceXService, (state) => {
22+
return getWorkspaceStatus(state.context.workspace?.latest_build)
23+
})
3324

3425
/**
3526
* Get workspace, template, and organization on mount and whenever workspaceId changes.

site/src/pages/WorkspacesPage/WorkspacesPageView.tsx

+32-23
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { WorkspaceBuild } from "../../api/typesGenerated"
1818
import { Margins } from "../../components/Margins/Margins"
1919
import { Stack } from "../../components/Stack/Stack"
2020
import { firstLetter } from "../../util/firstLetter"
21+
import { getWorkspaceStatus } from "../../util/workspace"
2122

2223
dayjs.extend(relativeTime)
2324

@@ -106,42 +107,50 @@ export const WorkspacesPageView: React.FC<WorkspacesPageViewProps> = (props) =>
106107
const getStatus = (theme: Theme, build: WorkspaceBuild): JSX.Element => {
107108
let status = ""
108109
let color = ""
109-
const inProgress = build.job.status === "running"
110-
switch (build.job.status) {
111-
case "running":
112-
case "succeeded":
113-
switch (build.transition) {
114-
case "start":
115-
color = theme.palette.success.main
116-
status = inProgress ? "⦿ Starting" : "⦿ Running"
117-
break
118-
case "stop":
119-
color = theme.palette.text.secondary
120-
status = inProgress ? "◍ Stopping" : "◍ Stopped"
121-
break
122-
case "delete":
123-
color = theme.palette.text.secondary
124-
status = inProgress ? "⦸ Deleting" : "⦸ Deleted"
125-
break
126-
}
110+
111+
switch (getWorkspaceStatus(build)) {
112+
case "started":
113+
color = theme.palette.success.main
114+
status = "⦿ Running"
127115
break
128-
case "canceled":
116+
case "starting":
117+
color = theme.palette.success.main
118+
status = "⦿ Starting"
119+
break
120+
case "stopping":
129121
color = theme.palette.text.secondary
130-
status = "◍ Canceled"
122+
status = "◍ Stopping"
123+
break
124+
case "stopped":
125+
color = theme.palette.text.secondary
126+
status = "◍ Stopped"
127+
break
128+
case "deleting":
129+
color = theme.palette.text.secondary
130+
status = "⦸ Deleting"
131+
break
132+
case "deleted":
133+
color = theme.palette.text.secondary
134+
status = "⦸ Deleted"
131135
break
132136
case "canceling":
133-
color = theme.palette.warning.main
137+
color = theme.palette.warning.light
134138
status = "◍ Canceling"
135139
break
136-
case "failed":
140+
case "canceled":
141+
color = theme.palette.text.secondary
142+
status = "◍ Canceled"
143+
break
144+
case "error":
137145
color = theme.palette.error.main
138146
status = "ⓧ Failed"
139147
break
140-
case "pending":
148+
case "queued":
141149
color = theme.palette.text.secondary
142150
status = "◍ Queued"
143151
break
144152
}
153+
145154
return <span style={{ color: color }}>{status}</span>
146155
}
147156

site/src/xServices/workspace/workspaceSelectors.ts renamed to site/src/util/workspace.ts

+21-9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,18 @@
1-
import { State } from "xstate"
2-
import { WorkspaceBuildTransition } from "../../api/types"
3-
import { WorkspaceStatus } from "../../pages/WorkspacePage/WorkspacePage"
4-
import { WorkspaceContext, WorkspaceEvent } from "./workspaceXService"
1+
import { WorkspaceBuildTransition } from "../api/types"
2+
import { WorkspaceBuild } from "../api/typesGenerated"
3+
4+
export type WorkspaceStatus =
5+
| "queued"
6+
| "started"
7+
| "starting"
8+
| "stopped"
9+
| "stopping"
10+
| "error"
11+
| "loading"
12+
| "deleting"
13+
| "deleted"
14+
| "canceled"
15+
| "canceling"
516

617
const inProgressToStatus: Record<WorkspaceBuildTransition, WorkspaceStatus> = {
718
start: "starting",
@@ -15,22 +26,23 @@ const succeededToStatus: Record<WorkspaceBuildTransition, WorkspaceStatus> = {
1526
delete: "deleted",
1627
}
1728

18-
export const selectWorkspaceStatus = (state: State<WorkspaceContext, WorkspaceEvent>): WorkspaceStatus => {
19-
const transition = state.context.workspace?.latest_build.transition as WorkspaceBuildTransition
20-
const jobStatus = state.context.workspace?.latest_build.job.status
29+
// Converts a workspaces status to a human-readable form.
30+
export const getWorkspaceStatus = (workspaceBuild?: WorkspaceBuild): WorkspaceStatus => {
31+
const transition = workspaceBuild?.transition as WorkspaceBuildTransition
32+
const jobStatus = workspaceBuild?.job.status
2133
switch (jobStatus) {
2234
case undefined:
2335
return "loading"
2436
case "succeeded":
2537
return succeededToStatus[transition]
2638
case "pending":
27-
return inProgressToStatus[transition]
39+
return "queued"
2840
case "running":
2941
return inProgressToStatus[transition]
3042
case "canceling":
3143
return "canceling"
3244
case "canceled":
33-
return "error"
45+
return "canceled"
3446
case "failed":
3547
return "error"
3648
}

0 commit comments

Comments
 (0)