Skip to content

Commit 9fdee5d

Browse files
fix: Storybook error on complex args (#2424)
1 parent b9f3fe4 commit 9fdee5d

File tree

1 file changed

+47
-35
lines changed

1 file changed

+47
-35
lines changed

site/src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx

+47-35
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,68 @@
11
import { ComponentMeta, Story } from "@storybook/react"
22
import { spawn } from "xstate"
3-
import { ProvisionerJobStatus, Workspace, WorkspaceTransition } from "../../api/typesGenerated"
3+
import { ProvisionerJobStatus, WorkspaceTransition } from "../../api/typesGenerated"
44
import { MockWorkspace } from "../../testHelpers/entities"
55
import { workspaceFilterQuery } from "../../util/workspace"
6-
import { workspaceItemMachine } from "../../xServices/workspaces/workspacesXService"
6+
import { workspaceItemMachine, WorkspaceItemMachineRef } from "../../xServices/workspaces/workspacesXService"
77
import { WorkspacesPageView, WorkspacesPageViewProps } from "./WorkspacesPageView"
88

9-
export default {
10-
title: "pages/WorkspacesPageView",
11-
component: WorkspacesPageView,
12-
} as ComponentMeta<typeof WorkspacesPageView>
13-
14-
const Template: Story<WorkspacesPageViewProps> = (args) => <WorkspacesPageView {...args} />
15-
16-
const createWorkspaceWithStatus = (
9+
const createWorkspaceItemRef = (
1710
status: ProvisionerJobStatus,
1811
transition: WorkspaceTransition = "start",
1912
outdated = false,
20-
): Workspace => {
21-
return {
22-
...MockWorkspace,
23-
outdated,
24-
latest_build: {
25-
...MockWorkspace.latest_build,
26-
transition,
27-
job: {
28-
...MockWorkspace.latest_build.job,
29-
status: status,
13+
): WorkspaceItemMachineRef => {
14+
return spawn(
15+
workspaceItemMachine.withContext({
16+
data: {
17+
...MockWorkspace,
18+
outdated,
19+
latest_build: {
20+
...MockWorkspace.latest_build,
21+
transition,
22+
job: {
23+
...MockWorkspace.latest_build.job,
24+
status: status,
25+
},
26+
},
3027
},
31-
},
32-
}
28+
}),
29+
)
3330
}
3431

3532
// This is type restricted to prevent future statuses from slipping
3633
// through the cracks unchecked!
37-
const workspaces: { [key in ProvisionerJobStatus]: Workspace } = {
38-
canceled: createWorkspaceWithStatus("canceled"),
39-
canceling: createWorkspaceWithStatus("canceling"),
40-
failed: createWorkspaceWithStatus("failed"),
41-
pending: createWorkspaceWithStatus("pending"),
42-
running: createWorkspaceWithStatus("running"),
43-
succeeded: createWorkspaceWithStatus("succeeded"),
34+
const workspaces: { [key in ProvisionerJobStatus]: WorkspaceItemMachineRef } = {
35+
canceled: createWorkspaceItemRef("canceled"),
36+
canceling: createWorkspaceItemRef("canceling"),
37+
failed: createWorkspaceItemRef("failed"),
38+
pending: createWorkspaceItemRef("pending"),
39+
running: createWorkspaceItemRef("running"),
40+
succeeded: createWorkspaceItemRef("succeeded"),
41+
}
42+
43+
const additionalWorkspaces: Record<string, WorkspaceItemMachineRef> = {
44+
runningAndStop: createWorkspaceItemRef("running", "stop"),
45+
succeededAndStop: createWorkspaceItemRef("succeeded", "stop"),
46+
runningAndDelete: createWorkspaceItemRef("running", "delete"),
47+
outdated: createWorkspaceItemRef("running", "delete", true),
4448
}
4549

50+
export default {
51+
title: "pages/WorkspacesPageView",
52+
component: WorkspacesPageView,
53+
argTypes: {
54+
workspaceRefs: {
55+
options: [...Object.keys(workspaces), ...Object.keys(additionalWorkspaces)],
56+
mapping: { ...workspaces, ...additionalWorkspaces },
57+
},
58+
},
59+
} as ComponentMeta<typeof WorkspacesPageView>
60+
61+
const Template: Story<WorkspacesPageViewProps> = (args) => <WorkspacesPageView {...args} />
62+
4663
export const AllStates = Template.bind({})
4764
AllStates.args = {
48-
workspaceRefs: [
49-
...Object.values(workspaces),
50-
createWorkspaceWithStatus("running", "stop"),
51-
createWorkspaceWithStatus("succeeded", "stop"),
52-
createWorkspaceWithStatus("running", "delete"),
53-
].map((data) => spawn(workspaceItemMachine.withContext({ data }))),
65+
workspaceRefs: [...Object.values(workspaces), ...Object.values(additionalWorkspaces)],
5466
}
5567

5668
export const OwnerHasNoWorkspaces = Template.bind({})

0 commit comments

Comments
 (0)