Skip to content

Commit 4b646cc

Browse files
Kira-Pilotjsjoeio
andauthored
fix: hiding agent status on stopped workspaces (#3512)
* hiding agent status on a stopped workspaace resolves #3484 * run prettier and lint * Update site/src/components/Resources/Resources.tsx Co-authored-by: Joe Previte <jjprevite@gmail.com> * running prettier Co-authored-by: Joe Previte <jjprevite@gmail.com>
1 parent acd0cd6 commit 4b646cc

File tree

8 files changed

+60
-34
lines changed

8 files changed

+60
-34
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { screen } from "@testing-library/react"
2+
import {
3+
MockStoppedWorkspace,
4+
MockWorkspaceResource,
5+
MockWorkspaceResource2,
6+
} from "testHelpers/entities"
7+
import { render } from "testHelpers/renderHelpers"
8+
import { DisplayAgentStatusLanguage } from "util/workspace"
9+
import { Resources } from "./Resources"
10+
11+
describe("ResourceTable", () => {
12+
it("hides status text when a workspace is stopped", async () => {
13+
// When
14+
const props = {
15+
resource: [{ ...MockWorkspaceResource }, { ...MockWorkspaceResource2 }],
16+
workspace: { ...MockStoppedWorkspace },
17+
canUpdateWorkspace: false,
18+
}
19+
20+
render(<Resources {...props} />)
21+
22+
const statusText = screen.queryByText(DisplayAgentStatusLanguage.connecting)
23+
24+
// Then
25+
expect(statusText).toBeNull()
26+
})
27+
})

site/src/components/Resources/Resources.tsx

+11-4
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import TableRow from "@material-ui/core/TableRow"
88
import useTheme from "@material-ui/styles/useTheme"
99
import { ErrorSummary } from "components/ErrorSummary/ErrorSummary"
1010
import { FC } from "react"
11+
import { getDisplayAgentStatus, getWorkspaceStatus, WorkspaceStateEnum } from "util/workspace"
1112
import { Workspace, WorkspaceResource } from "../../api/typesGenerated"
12-
import { getDisplayAgentStatus } from "../../util/workspace"
1313
import { AppLink } from "../AppLink/AppLink"
1414
import { SSHButton } from "../SSHButton/SSHButton"
1515
import { Stack } from "../Stack/Stack"
@@ -42,6 +42,10 @@ export const Resources: FC<ResourcesProps> = ({
4242
const styles = useStyles()
4343
const theme: Theme = useTheme()
4444

45+
const workspaceStatus: keyof typeof WorkspaceStateEnum = getWorkspaceStatus(
46+
workspace.latest_build,
47+
)
48+
4549
return (
4650
<div aria-label={Language.resources} className={styles.wrapper}>
4751
{getResourcesError ? (
@@ -102,9 +106,12 @@ export const Resources: FC<ResourcesProps> = ({
102106
{agent.name}
103107
<div className={styles.agentInfo}>
104108
<span className={styles.operatingSystem}>{agent.operating_system}</span>
105-
<span style={{ color: agentStatus.color }} className={styles.status}>
106-
{agentStatus.status}
107-
</span>
109+
{WorkspaceStateEnum[workspaceStatus] !==
110+
WorkspaceStateEnum["stopped"] && (
111+
<span style={{ color: agentStatus.color }} className={styles.status}>
112+
{agentStatus.status}
113+
</span>
114+
)}
108115
</div>
109116
</TableCell>
110117
<TableCell>

site/src/components/WorkspaceActions/ActionCtas.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import PlayCircleOutlineIcon from "@material-ui/icons/PlayCircleOutline"
88
import { LoadingButton } from "components/LoadingButton/LoadingButton"
99
import { FC } from "react"
1010
import { combineClasses } from "util/combineClasses"
11+
import { WorkspaceStateEnum } from "util/workspace"
1112
import { WorkspaceActionButton } from "../WorkspaceActionButton/WorkspaceActionButton"
12-
import { WorkspaceStateEnum } from "./constants"
1313

1414
export const Language = {
1515
start: "Start",

site/src/components/WorkspaceActions/DropdownContent/DropdownContent.stories.tsx

+2-6
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
import { Story } from "@storybook/react"
2+
import { WorkspaceStateEnum } from "util/workspace"
23
import { DeleteButton, StartButton, StopButton } from "../ActionCtas"
3-
import {
4-
ButtonMapping,
5-
ButtonTypesEnum,
6-
WorkspaceStateActions,
7-
WorkspaceStateEnum,
8-
} from "../constants"
4+
import { ButtonMapping, ButtonTypesEnum, WorkspaceStateActions } from "../constants"
95
import { DropdownContent, DropdownContentProps } from "./DropdownContent"
106

117
// These are the stories for the secondary actions (housed in the dropdown)

site/src/components/WorkspaceActions/WorkspaceActions.test.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { screen } from "@testing-library/react"
2+
import { WorkspaceStateEnum } from "util/workspace"
23
import * as Mocks from "../../testHelpers/entities"
34
import { render } from "../../testHelpers/renderHelpers"
45
import { Language } from "./ActionCtas"
5-
import { WorkspaceStateEnum } from "./constants"
66
import { WorkspaceActions, WorkspaceActionsProps } from "./WorkspaceActions"
77

88
const renderComponent = async (props: Partial<WorkspaceActionsProps> = {}) => {

site/src/components/WorkspaceActions/WorkspaceActions.tsx

+2-7
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import Button from "@material-ui/core/Button"
22
import Popover from "@material-ui/core/Popover"
33
import { makeStyles } from "@material-ui/core/styles"
44
import { FC, useEffect, useMemo, useRef, useState } from "react"
5+
import { getWorkspaceStatus, WorkspaceStateEnum, WorkspaceStatus } from "util/workspace"
56
import { Workspace } from "../../api/typesGenerated"
6-
import { getWorkspaceStatus, WorkspaceStatus } from "../../util/workspace"
77
import { CloseDropdown, OpenDropdown } from "../DropdownArrows/DropdownArrows"
88
import {
99
ActionLoadingButton,
@@ -15,12 +15,7 @@ import {
1515
StopButton,
1616
UpdateButton,
1717
} from "./ActionCtas"
18-
import {
19-
ButtonMapping,
20-
ButtonTypesEnum,
21-
WorkspaceStateActions,
22-
WorkspaceStateEnum,
23-
} from "./constants"
18+
import { ButtonMapping, ButtonTypesEnum, WorkspaceStateActions } from "./constants"
2419
import { DropdownContent } from "./DropdownContent/DropdownContent"
2520

2621
/**

site/src/components/WorkspaceActions/constants.ts

+1-15
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,5 @@
11
import { ReactNode } from "react"
2-
3-
// all the possible states returned by the API
4-
export enum WorkspaceStateEnum {
5-
starting = "Starting",
6-
started = "Started",
7-
stopping = "Stopping",
8-
stopped = "Stopped",
9-
canceling = "Canceling",
10-
canceled = "Canceled",
11-
deleting = "Deleting",
12-
deleted = "Deleted",
13-
queued = "Queued",
14-
error = "Error",
15-
loading = "Loading",
16-
}
2+
import { WorkspaceStateEnum } from "util/workspace"
173

184
// the button types we have
195
export enum ButtonTypesEnum {

site/src/util/workspace.ts

+15
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,21 @@ import * as TypesGen from "../api/typesGenerated"
66

77
dayjs.extend(utc)
88

9+
// all the possible states returned by the API
10+
export enum WorkspaceStateEnum {
11+
starting = "Starting",
12+
started = "Started",
13+
stopping = "Stopping",
14+
stopped = "Stopped",
15+
canceling = "Canceling",
16+
canceled = "Canceled",
17+
deleting = "Deleting",
18+
deleted = "Deleted",
19+
queued = "Queued",
20+
error = "Error",
21+
loading = "Loading",
22+
}
23+
924
export type WorkspaceStatus =
1025
| "queued"
1126
| "started"

0 commit comments

Comments
 (0)