Skip to content

Commit 9b70a9b

Browse files
authored
Fix: fix Workspace storybook and remove unnecessary fetching from xService (#1682)
* Make workspace machine ephemeral to limit polling * Fix Workspace storybook * Lint * Remove breadcrumb from workspaceXService
1 parent 4ba3eed commit 9b70a9b

File tree

6 files changed

+29
-85
lines changed

6 files changed

+29
-85
lines changed

site/src/components/Workspace/Workspace.stories.tsx

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,17 @@ import { action } from "@storybook/addon-actions"
22
import { Story } from "@storybook/react"
33
import React from "react"
44
import {
5+
MockCanceledWorkspace,
6+
MockCancelingWorkspace,
7+
MockDeletedWorkspace,
8+
MockDeletingWorkspace,
9+
MockFailedWorkspace,
510
MockOutdatedWorkspace,
11+
MockStartingWorkspace,
12+
MockStoppedWorkspace,
13+
MockStoppingWorkspace,
614
MockWorkspace,
15+
MockWorkspaceBuild,
716
MockWorkspaceResource,
817
MockWorkspaceResource2,
918
} from "../../testHelpers/renderHelpers"
@@ -23,36 +32,33 @@ Started.args = {
2332
handleStart: action("start"),
2433
handleStop: action("stop"),
2534
handleRetry: action("retry"),
26-
workspaceStatus: "started",
2735
resources: [MockWorkspaceResource, MockWorkspaceResource2],
36+
builds: [MockWorkspaceBuild],
2837
}
2938

3039
export const Starting = Template.bind({})
31-
Starting.args = { ...Started.args, workspaceStatus: "starting" }
40+
Starting.args = { ...Started.args, workspace: MockStartingWorkspace }
3241

3342
export const Stopped = Template.bind({})
34-
Stopped.args = { ...Started.args, workspaceStatus: "stopped" }
43+
Stopped.args = { ...Started.args, workspace: MockStoppedWorkspace }
3544

3645
export const Stopping = Template.bind({})
37-
Stopping.args = { ...Started.args, workspaceStatus: "stopping" }
46+
Stopping.args = { ...Started.args, workspace: MockStoppingWorkspace }
3847

3948
export const Error = Template.bind({})
40-
Error.args = { ...Started.args, workspaceStatus: "error" }
41-
42-
export const BuildLoading = Template.bind({})
43-
BuildLoading.args = { ...Started.args, workspaceStatus: "loading" }
49+
Error.args = { ...Started.args, workspace: MockFailedWorkspace }
4450

4551
export const Deleting = Template.bind({})
46-
Deleting.args = { ...Started.args, workspaceStatus: "deleting" }
52+
Deleting.args = { ...Started.args, workspace: MockDeletingWorkspace }
4753

4854
export const Deleted = Template.bind({})
49-
Deleted.args = { ...Started.args, workspaceStatus: "deleted" }
55+
Deleted.args = { ...Started.args, workspace: MockDeletedWorkspace }
5056

5157
export const Canceling = Template.bind({})
52-
Canceling.args = { ...Started.args, workspaceStatus: "canceling" }
58+
Canceling.args = { ...Started.args, workspace: MockCancelingWorkspace }
5359

54-
export const NoBreadcrumb = Template.bind({})
55-
NoBreadcrumb.args = { ...Started.args, template: undefined }
60+
export const Canceled = Template.bind({})
61+
Canceled.args = { ...Started.args, workspace: MockCanceledWorkspace }
5662

5763
export const Outdated = Template.bind({})
5864
Outdated.args = { ...Started.args, workspace: MockOutdatedWorkspace }

site/src/components/Workspace/Workspace.tsx

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import Typography from "@material-ui/core/Typography"
33
import React from "react"
44
import * as TypesGen from "../../api/typesGenerated"
55
import { MONOSPACE_FONT_FAMILY } from "../../theme/constants"
6-
import { WorkspaceStatus } from "../../util/workspace"
76
import { BuildsTable } from "../BuildsTable/BuildsTable"
87
import { Resources } from "../Resources/Resources"
98
import { Stack } from "../Stack/Stack"
@@ -18,7 +17,6 @@ export interface WorkspaceProps {
1817
handleRetry: () => void
1918
handleUpdate: () => void
2019
workspace: TypesGen.Workspace
21-
workspaceStatus: WorkspaceStatus
2220
resources?: TypesGen.WorkspaceResource[]
2321
getResourcesError?: Error
2422
builds?: TypesGen.WorkspaceBuild[]
@@ -33,7 +31,6 @@ export const Workspace: React.FC<WorkspaceProps> = ({
3331
handleRetry,
3432
handleUpdate,
3533
workspace,
36-
workspaceStatus,
3734
resources,
3835
getResourcesError,
3936
builds,
@@ -60,7 +57,6 @@ export const Workspace: React.FC<WorkspaceProps> = ({
6057
handleStop={handleStop}
6158
handleRetry={handleRetry}
6259
handleUpdate={handleUpdate}
63-
workspaceStatus={workspaceStatus}
6460
/>
6561
</div>
6662
</div>

site/src/components/WorkspaceActions/WorkspaceActions.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import StopIcon from "@material-ui/icons/Stop"
88
import React from "react"
99
import { Link as RouterLink } from "react-router-dom"
1010
import { Workspace } from "../../api/typesGenerated"
11-
import { WorkspaceStatus } from "../../util/workspace"
11+
import { getWorkspaceStatus, WorkspaceStatus } from "../../util/workspace"
1212
import { Stack } from "../Stack/Stack"
1313
import { WorkspaceActionButton } from "../WorkspaceActionButton/WorkspaceActionButton"
1414

@@ -30,7 +30,6 @@ const canAcceptJobs = (workspaceStatus: WorkspaceStatus) =>
3030

3131
export interface WorkspaceActionsProps {
3232
workspace: Workspace
33-
workspaceStatus: WorkspaceStatus
3433
handleStart: () => void
3534
handleStop: () => void
3635
handleRetry: () => void
@@ -39,13 +38,13 @@ export interface WorkspaceActionsProps {
3938

4039
export const WorkspaceActions: React.FC<WorkspaceActionsProps> = ({
4140
workspace,
42-
workspaceStatus,
4341
handleStart,
4442
handleStop,
4543
handleRetry,
4644
handleUpdate,
4745
}) => {
4846
const styles = useStyles()
47+
const workspaceStatus = getWorkspaceStatus(workspace.latest_build)
4948

5049
return (
5150
<Stack direction="row" spacing={1}>

site/src/pages/WorkspacePage/WorkspacePage.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ 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"
1110
import { workspaceMachine } from "../../xServices/workspace/workspaceXService"
1211

1312
export const WorkspacePage: React.FC = () => {
@@ -16,7 +15,6 @@ export const WorkspacePage: React.FC = () => {
1615

1716
const [workspaceState, workspaceSend] = useMachine(workspaceMachine)
1817
const { workspace, resources, getWorkspaceError, getResourcesError, builds } = workspaceState.context
19-
const workspaceStatus = getWorkspaceStatus(workspace?.latest_build)
2018

2119
/**
2220
* Get workspace, template, and organization on mount and whenever workspaceId changes.
@@ -40,7 +38,6 @@ export const WorkspacePage: React.FC = () => {
4038
handleStop={() => workspaceSend("STOP")}
4139
handleRetry={() => workspaceSend("RETRY")}
4240
handleUpdate={() => workspaceSend("UPDATE")}
43-
workspaceStatus={workspaceStatus}
4441
resources={resources}
4542
getResourcesError={getResourcesError instanceof Error ? getResourcesError : undefined}
4643
builds={builds}

site/src/testHelpers/entities.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ export const MockCancelingProvisionerJob = {
7676
...MockProvisionerJob,
7777
status: "canceling" as TypesGen.ProvisionerJobStatus,
7878
}
79+
export const MockCanceledProvisionerJob = {
80+
...MockProvisionerJob,
81+
status: "canceled" as TypesGen.ProvisionerJobStatus,
82+
}
7983
export const MockRunningProvisionerJob = { ...MockProvisionerJob, status: "running" as TypesGen.ProvisionerJobStatus }
8084

8185
export const MockTemplateVersion: TypesGen.TemplateVersion = {
@@ -164,6 +168,10 @@ export const MockCancelingWorkspace: TypesGen.Workspace = {
164168
...MockWorkspace,
165169
latest_build: { ...MockWorkspaceBuild, job: MockCancelingProvisionerJob },
166170
}
171+
export const MockCanceledWorkspace: TypesGen.Workspace = {
172+
...MockWorkspace,
173+
latest_build: { ...MockWorkspaceBuild, job: MockCanceledProvisionerJob },
174+
}
167175
export const MockFailedWorkspace: TypesGen.Workspace = {
168176
...MockWorkspace,
169177
latest_build: { ...MockWorkspaceBuild, job: MockFailedProvisionerJob },

site/src/xServices/workspace/workspaceXService.ts

Lines changed: 0 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,9 @@ const Language = {
1919
export interface WorkspaceContext {
2020
workspace?: TypesGen.Workspace
2121
template?: TypesGen.Template
22-
organization?: TypesGen.Organization
2322
build?: TypesGen.WorkspaceBuild
2423
resources?: TypesGen.WorkspaceResource[]
2524
getWorkspaceError?: Error | unknown
26-
getTemplateError?: Error | unknown
27-
getOrganizationError?: Error | unknown
2825
// error creating a new WorkspaceBuild
2926
buildError?: Error | unknown
3027
// these are separate from getX errors because they don't make the page unusable
@@ -59,9 +56,6 @@ export const workspaceMachine = createMachine(
5956
getTemplate: {
6057
data: TypesGen.Template
6158
}
62-
getOrganization: {
63-
data: TypesGen.Organization
64-
}
6559
startWorkspace: {
6660
data: TypesGen.WorkspaceBuild
6761
}
@@ -130,43 +124,6 @@ export const workspaceMachine = createMachine(
130124
},
131125
},
132126
},
133-
breadcrumb: {
134-
initial: "gettingTemplate",
135-
states: {
136-
gettingTemplate: {
137-
invoke: {
138-
src: "getTemplate",
139-
id: "getTemplate",
140-
onDone: {
141-
target: "gettingOrganization",
142-
actions: ["assignTemplate", "clearGetTemplateError"],
143-
},
144-
onError: {
145-
target: "error",
146-
actions: "assignGetTemplateError",
147-
},
148-
},
149-
tags: "loading",
150-
},
151-
gettingOrganization: {
152-
invoke: {
153-
src: "getOrganization",
154-
id: "getOrganization",
155-
onDone: {
156-
target: "ready",
157-
actions: ["assignOrganization", "clearGetOrganizationError"],
158-
},
159-
onError: {
160-
target: "error",
161-
actions: "assignGetOrganizationError",
162-
},
163-
},
164-
tags: "loading",
165-
},
166-
error: {},
167-
ready: {},
168-
},
169-
},
170127
build: {
171128
initial: "idle",
172129
states: {
@@ -309,7 +266,6 @@ export const workspaceMachine = createMachine(
309266
assign({
310267
workspace: undefined,
311268
template: undefined,
312-
organization: undefined,
313269
build: undefined,
314270
}),
315271
assignWorkspace: assign({
@@ -322,17 +278,6 @@ export const workspaceMachine = createMachine(
322278
assignTemplate: assign({
323279
template: (_, event) => event.data,
324280
}),
325-
assignGetTemplateError: assign({
326-
getTemplateError: (_, event) => event.data,
327-
}),
328-
clearGetTemplateError: (context) => assign({ ...context, getTemplateError: undefined }),
329-
assignOrganization: assign({
330-
organization: (_, event) => event.data,
331-
}),
332-
assignGetOrganizationError: assign({
333-
getOrganizationError: (_, event) => event.data,
334-
}),
335-
clearGetOrganizationError: (context) => assign({ ...context, getOrganizationError: undefined }),
336281
assignBuild: (_, event) =>
337282
assign({
338283
build: event.data,
@@ -438,13 +383,6 @@ export const workspaceMachine = createMachine(
438383
throw Error("Cannot get template without workspace")
439384
}
440385
},
441-
getOrganization: async (context) => {
442-
if (context.template) {
443-
return await API.getOrganization(context.template.organization_id)
444-
} else {
445-
throw Error("Cannot get organization without template")
446-
}
447-
},
448386
startWorkspace: async (context) => {
449387
if (context.workspace) {
450388
return await API.startWorkspace(context.workspace.id, context.template?.active_version_id)

0 commit comments

Comments
 (0)