|
1 | 1 | import { ComponentMeta, Story } from "@storybook/react"
|
2 | 2 | import { spawn } from "xstate"
|
3 |
| -import { ProvisionerJobStatus, Workspace, WorkspaceTransition } from "../../api/typesGenerated" |
| 3 | +import { ProvisionerJobStatus, WorkspaceTransition } from "../../api/typesGenerated" |
4 | 4 | import { MockWorkspace } from "../../testHelpers/entities"
|
5 | 5 | import { workspaceFilterQuery } from "../../util/workspace"
|
6 |
| -import { workspaceItemMachine } from "../../xServices/workspaces/workspacesXService" |
| 6 | +import { workspaceItemMachine, WorkspaceItemMachineRef } from "../../xServices/workspaces/workspacesXService" |
7 | 7 | import { WorkspacesPageView, WorkspacesPageViewProps } from "./WorkspacesPageView"
|
8 | 8 |
|
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 = ( |
17 | 10 | status: ProvisionerJobStatus,
|
18 | 11 | transition: WorkspaceTransition = "start",
|
19 | 12 | 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 | + }, |
30 | 27 | },
|
31 |
| - }, |
32 |
| - } |
| 28 | + }), |
| 29 | + ) |
33 | 30 | }
|
34 | 31 |
|
35 | 32 | // This is type restricted to prevent future statuses from slipping
|
36 | 33 | // 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), |
44 | 48 | }
|
45 | 49 |
|
| 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 | + |
46 | 63 | export const AllStates = Template.bind({})
|
47 | 64 | 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)], |
54 | 66 | }
|
55 | 67 |
|
56 | 68 | export const OwnerHasNoWorkspaces = Template.bind({})
|
|
0 commit comments