Skip to content

Commit b78f0b5

Browse files
committed
added deleted workspace banner
1 parent b4f5920 commit b78f0b5

File tree

6 files changed

+58
-8
lines changed

6 files changed

+58
-8
lines changed

site/src/api/api.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,9 @@ export const getTemplateVersionResources = async (versionId: string): Promise<Ty
107107
return response.data
108108
}
109109

110-
export const getWorkspace = async (workspaceId: string): Promise<TypesGen.Workspace> => {
111-
const response = await axios.get<TypesGen.Workspace>(`/api/v2/workspaces/${workspaceId}`)
110+
export const getWorkspace = async (workspaceId: string, params?: any): Promise<TypesGen.Workspace> => {
111+
console.log("in here", params)
112+
const response = await axios.get<TypesGen.Workspace>(`/api/v2/workspaces/${workspaceId}`, { params })
112113
return response.data
113114
}
114115

site/src/components/Workspace/Workspace.tsx

+10-2
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ import Typography from "@material-ui/core/Typography"
33
import { FC } from "react"
44
import * as TypesGen from "../../api/typesGenerated"
55
import { MONOSPACE_FONT_FAMILY } from "../../theme/constants"
6+
import { getWorkspaceStatus, succeededToStatus } from "../../util/workspace"
67
import { BuildsTable } from "../BuildsTable/BuildsTable"
78
import { Resources } from "../Resources/Resources"
89
import { Stack } from "../Stack/Stack"
910
import { WorkspaceActions } from "../WorkspaceActions/WorkspaceActions"
11+
import { WorkspaceDeletedBanner } from "../WorkspaceDeletedBanner/WorkspaceDeletedBanner"
1012
import { WorkspaceSchedule } from "../WorkspaceSchedule/WorkspaceSchedule"
1113
import { WorkspaceScheduleBanner } from "../WorkspaceScheduleBanner/WorkspaceScheduleBanner"
1214
import { WorkspaceSection } from "../WorkspaceSection/WorkspaceSection"
@@ -44,7 +46,9 @@ export const Workspace: FC<WorkspaceProps> = ({
4446
builds,
4547
}) => {
4648
const styles = useStyles()
47-
49+
console.log("workspace", workspace)
50+
const isDeleted = getWorkspaceStatus(workspace.latest_build) === succeededToStatus["delete"]
51+
console.log("isDeleted", isDeleted)
4852
return (
4953
<div className={styles.root}>
5054
<Stack direction="row" spacing={3}>
@@ -82,9 +86,13 @@ export const Workspace: FC<WorkspaceProps> = ({
8286
workspace={workspace}
8387
/>
8488

89+
{isDeleted && <WorkspaceDeletedBanner />}
90+
8591
<WorkspaceStats workspace={workspace} />
8692

87-
<Resources resources={resources} getResourcesError={getResourcesError} workspace={workspace} />
93+
{!!resources && !!resources.length && (
94+
<Resources resources={resources} getResourcesError={getResourcesError} workspace={workspace} />
95+
)}
8896

8997
<WorkspaceSection title="Timeline" contentsProps={{ className: styles.timelineContents }}>
9098
<BuildsTable builds={builds} className={styles.timelineTable} />
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import Button from "@material-ui/core/Button"
2+
import { makeStyles } from "@material-ui/core/styles"
3+
import Alert from "@material-ui/lab/Alert"
4+
import AlertTitle from "@material-ui/lab/AlertTitle"
5+
import { FC } from "react"
6+
import { useNavigate } from "react-router-dom"
7+
8+
const Language = {
9+
bannerTitle: "This workspace has been deleted and cannot be edited.",
10+
createWorkspaceCta: "Create new workspace",
11+
}
12+
13+
export const WorkspaceDeletedBanner: FC = () => {
14+
const styles = useStyles()
15+
const navigate = useNavigate()
16+
17+
return (
18+
<Alert
19+
className={styles.root}
20+
action={
21+
<Button color="inherit" onClick={() => navigate(`/workspaces/new`)} size="small">
22+
{Language.createWorkspaceCta}
23+
</Button>
24+
}
25+
severity="warning"
26+
>
27+
<AlertTitle>{Language.bannerTitle}</AlertTitle>
28+
</Alert>
29+
)
30+
}
31+
32+
export const useStyles = makeStyles(() => {
33+
return {
34+
root: {
35+
alignItems: "center",
36+
"& .MuiAlertTitle-root": {
37+
marginBottom: "0px",
38+
},
39+
},
40+
}
41+
})

site/src/pages/WorkspacePage/WorkspacePage.tsx

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useMachine } from "@xstate/react"
22
import React, { useEffect } from "react"
3-
import { useNavigate, useParams } from "react-router-dom"
3+
import { useParams } from "react-router-dom"
44
import { DeleteWorkspaceDialog } from "../../components/DeleteWorkspaceDialog/DeleteWorkspaceDialog"
55
import { ErrorSummary } from "../../components/ErrorSummary/ErrorSummary"
66
import { FullScreenLoader } from "../../components/Loader/FullScreenLoader"
@@ -13,7 +13,6 @@ import { workspaceScheduleBannerMachine } from "../../xServices/workspaceSchedul
1313

1414
export const WorkspacePage: React.FC = () => {
1515
const { workspace: workspaceQueryParam } = useParams()
16-
const navigate = useNavigate()
1716
const workspaceId = firstOrItem(workspaceQueryParam, null)
1817

1918
const [workspaceState, workspaceSend] = useMachine(workspaceMachine)
@@ -60,7 +59,6 @@ export const WorkspacePage: React.FC = () => {
6059
handleCancel={() => workspaceSend("CANCEL_DELETE")}
6160
handleConfirm={() => {
6261
workspaceSend("DELETE")
63-
navigate("/workspaces")
6462
}}
6563
/>
6664
</>

site/src/util/workspace.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const inProgressToStatus: Record<WorkspaceBuildTransition, WorkspaceStatus> = {
2525
delete: "deleting",
2626
}
2727

28-
const succeededToStatus: Record<WorkspaceBuildTransition, WorkspaceStatus> = {
28+
export const succeededToStatus: Record<WorkspaceBuildTransition, WorkspaceStatus> = {
2929
start: "started",
3030
stop: "stopped",
3131
delete: "deleted",

site/src/xServices/workspace/workspaceXService.ts

+2
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,7 @@ export const workspaceMachine = createMachine(
431431
},
432432
services: {
433433
getWorkspace: async (_, event) => {
434+
// { deleted: true }
434435
return await API.getWorkspace(event.workspaceId)
435436
},
436437
getTemplate: async (context) => {
@@ -470,6 +471,7 @@ export const workspaceMachine = createMachine(
470471
},
471472
refreshWorkspace: async (context) => {
472473
if (context.workspace) {
474+
// need to add {deleted: true} here but there is a BE bug rn
473475
return await API.getWorkspace(context.workspace.id)
474476
} else {
475477
throw Error("Cannot refresh workspace without id")

0 commit comments

Comments
 (0)