1
1
import { assign , createMachine } from "xstate"
2
- import { getTemplateByName , getTemplateVersion , getTemplateVersionResources } from "../../api/api"
2
+ import {
3
+ getTemplateByName ,
4
+ getTemplateVersion ,
5
+ getTemplateVersionResources ,
6
+ getTemplateVersions ,
7
+ } from "../../api/api"
3
8
import { Template , TemplateVersion , WorkspaceResource } from "../../api/typesGenerated"
4
9
5
10
interface TemplateContext {
@@ -8,6 +13,7 @@ interface TemplateContext {
8
13
template ?: Template
9
14
activeTemplateVersion ?: TemplateVersion
10
15
templateResources ?: WorkspaceResource [ ]
16
+ templateVersions ?: TemplateVersion [ ]
11
17
}
12
18
13
19
export const templateMachine = createMachine (
@@ -24,6 +30,9 @@ export const templateMachine = createMachine(
24
30
getTemplateResources : {
25
31
data : WorkspaceResource [ ]
26
32
}
33
+ getTemplateVersions : {
34
+ data : TemplateVersion [ ]
35
+ }
27
36
} ,
28
37
} ,
29
38
tsTypes : { } as import ( "./templateXService.typegen" ) . Typegen0 ,
@@ -72,6 +81,21 @@ export const templateMachine = createMachine(
72
81
success : { type : "final" } ,
73
82
} ,
74
83
} ,
84
+ templateVersions : {
85
+ initial : "gettingTemplateVersions" ,
86
+ states : {
87
+ gettingTemplateVersions : {
88
+ invoke : {
89
+ src : "getTemplateVersions" ,
90
+ onDone : {
91
+ actions : [ "assignTemplateVersions" ] ,
92
+ target : "success" ,
93
+ } ,
94
+ } ,
95
+ } ,
96
+ success : { type : "final" } ,
97
+ } ,
98
+ } ,
75
99
} ,
76
100
} ,
77
101
loaded : { } ,
@@ -94,6 +118,13 @@ export const templateMachine = createMachine(
94
118
95
119
return getTemplateVersionResources ( ctx . template . active_version_id )
96
120
} ,
121
+ getTemplateVersions : ( ctx ) => {
122
+ if ( ! ctx . template ) {
123
+ throw new Error ( "Template not loaded" )
124
+ }
125
+
126
+ return getTemplateVersions ( ctx . template . id )
127
+ } ,
97
128
} ,
98
129
actions : {
99
130
assignTemplate : assign ( {
@@ -105,6 +136,9 @@ export const templateMachine = createMachine(
105
136
assignTemplateResources : assign ( {
106
137
templateResources : ( _ , event ) => event . data ,
107
138
} ) ,
139
+ assignTemplateVersions : assign ( {
140
+ templateVersions : ( _ , event ) => event . data ,
141
+ } ) ,
108
142
} ,
109
143
} ,
110
144
)
0 commit comments