1
1
import { assign , createMachine } from "xstate"
2
2
import {
3
+ deleteTemplate ,
3
4
getTemplateByName ,
4
5
getTemplateVersion ,
5
6
getTemplateVersionResources ,
@@ -14,131 +15,206 @@ interface TemplateContext {
14
15
activeTemplateVersion ?: TemplateVersion
15
16
templateResources ?: WorkspaceResource [ ]
16
17
templateVersions ?: TemplateVersion [ ]
18
+ deleteTemplateError ?: Error | unknown
17
19
}
18
20
19
- export const templateMachine = createMachine (
20
- {
21
- schema : {
22
- context : { } as TemplateContext ,
23
- services : { } as {
24
- getTemplate : {
25
- data : Template
26
- }
27
- getActiveTemplateVersion : {
28
- data : TemplateVersion
29
- }
30
- getTemplateResources : {
31
- data : WorkspaceResource [ ]
32
- }
33
- getTemplateVersions : {
34
- data : TemplateVersion [ ]
35
- }
36
- } ,
21
+ type TemplateEvent = { type : "DELETE" } | { type : "CONFIRM_DELETE" } | { type : "CANCEL_DELETE" }
22
+
23
+ export const templateMachine =
24
+ /** @xstate -layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOhgBdyCoAVMVABwBt1ywBiCAe0JIIDcuAazAk0WPIVIUq+WvWaswCAV0ytcPANoAGALqJQDLrFxUehkAA9EAJgDsOkgGZbO2wE5bANg8BGABZnHR0AgBoQAE9EPx0-Eg9EpIAOe28-D28ggF9siPEcAmI+fDNcdCYASXwAMy4SLCp+MDpGFjYANTAAJ1MeMjBKagBBTCaWhXawLt7NfE4eUVURMQxCqRKyiuq6hrHcZtbFTp6+-AGhuVHxo6mZs5V8QXVzfF0DJBBjU1fLGwQAgF4t4AKzeWzOTIhEEhZIRaIIZI6EEkEIhZyg2xuEF+XL5NaSYoELZVWr1NhtJQAJTgXAArt1MHALrJ5JS2DTYPTGXAFrxlqICoTSMSqNsySQKccwJzuUzYCzqLdqbSGfLHs8NNp9JZvmULJ9-kDkiRks4QR50SDkh5nH5nPCYjpXKi0SDnObbeaAniQEKiiLSmLSbspXdTnMFTIlZMlPdI3ylk9hIKCQHNsGduTYydZjwo4NWcrc2dYBq1Fq3jrPnrfobEAFQqbQt5kiCcf4go6ECD7Ca0XFMskAmksr7-RtReUQ1xEyRYOQlKsJOmp+K6rqTPr8H9ELaTclkg5wQEzRidB5u-Y0q6QgFbAEsuCMuO0xsmFx0BBIOwACIAUQAGX-Gh-03H45ksBFrycGE7zcW1bD8e0In+Pw3G8EggT8M0-Fbc8PGSV8Vw2TAeBqXBulQahfzAJhBg4ABhAB5AA5AAxSoqQAWQAfQA4DQPA7ddwQZCMVRUF7Bw3svXsEFuz8MFMNtC8bRtHQzWHYj1mKMjako6i5Fo+i2HYRjhlYxigP4oCQLAmstzrUA0OcaSSHsZwbSUjwAl83zwiiGJGw8LCwTtU8vGQnI8j9N9im-UzqDnAUSEShjizAYTnOsRB7BHEglLwoqskCWxFJ8ewPJ0bx8tsC1IQhZwdOFNK6MGZKem6LhuhIY46iotrTImdkssciCDRcvcbVRJrwr8fLXHsRTYRIOCau8WqYRxIjfXwLhv3gT4J2KaM5Ey7LIPrAFyqChBLVvEJPGk2w21PFrVyDacsz2G4c2mCN+jOqBrgOEbpXjSavicq6prEhar1tR7IXSaSfVik7AxJH7GjBzLIfOWA6UweUjqMGGof+TzbEKsEMiRdwYUhbtkhw5HnHvXx0g8D7Jy+9d6lxw5-oJy7Kb3B07vsJDkekjwcSyWxeaJfmZ0lf7ZTVZlgcyzWeTJ6GJp3a7kOWu7YjcR6wQCEFAQfbxlaxzMJTDFUuS1hUiZJuADdrWHcoQVtMJxdtWfvaL0hWm2rfcRXHxBR2M2+l2NdVfWxeNuHbW7Xz+xCWJkm8ZE3LbRO1zV12S0jRVzpFwH8F9inM4D03u2Ux6sWvQj2wTjH4qd5PQzrvMG-nYnSYz0TQRNG3gnUyE+zNNv-EevDrUya9mr7kiVexlPRoJxujdE7O7r8gIO+dXtUkyMvVazSfrt8bt7xpgcFttC1nXsROPy-SBH5w1iO6MKwRghAkbH2BSUtHBrTRPeC8rhxKJ30hRKiNF2psEAS3ZCNMkR4R8MOWqfloEIntCvDmnoRzyUIvLRO6VWTYP+F4TCNt0g22REhV6pCYgEJIPVDENsPBpA9GkehmCAHjREtdVmmFPCKy2u6RwcJzaQicMOb0wQ3ALVxNvXSRAmExBUWQvOA5baqXlrbXIuQgA */
25
+ createMachine (
26
+ {
27
+ tsTypes : { } as import ( "./templateXService.typegen" ) . Typegen0 ,
28
+ schema : {
29
+ context : { } as TemplateContext ,
30
+ events : { } as TemplateEvent ,
31
+ services : { } as {
32
+ getTemplate : {
33
+ data : Template
34
+ }
35
+ getActiveTemplateVersion : {
36
+ data : TemplateVersion
37
+ }
38
+ getTemplateResources : {
39
+ data : WorkspaceResource [ ]
40
+ }
41
+ getTemplateVersions : {
42
+ data : TemplateVersion [ ]
43
+ }
44
+ deleteTemplate : {
45
+ data : Template
46
+ }
37
47
} ,
38
- tsTypes : { } as import ( "./templateXService.typegen" ) . Typegen0 ,
39
- initial : "gettingTemplate" ,
40
- states : {
41
- gettingTemplate : {
42
- invoke : {
43
- src : "getTemplate" ,
44
- onDone : {
45
- actions : [ "assignTemplate" ] ,
48
+ } ,
49
+ id : "(machine)" ,
50
+ initial : "gettingTemplate" ,
51
+ states : {
52
+ gettingTemplate : {
53
+ invoke : {
54
+ src : "getTemplate" ,
55
+ onDone : [
56
+ {
57
+ actions : "assignTemplate" ,
46
58
target : "initialInfo" ,
47
59
} ,
48
- } ,
60
+ ] ,
49
61
} ,
50
- initialInfo : {
51
- type : "parallel" ,
52
- onDone : "loaded" ,
53
- states : {
54
- activeTemplateVersion : {
55
- initial : "gettingActiveTemplateVersion" ,
56
- states : {
57
- gettingActiveTemplateVersion : {
58
- invoke : {
59
- src : "getActiveTemplateVersion" ,
60
- onDone : {
61
- actions : [ "assignActiveTemplateVersion" ] ,
62
+ } ,
63
+ initialInfo : {
64
+ type : "parallel" ,
65
+ states : {
66
+ activeTemplateVersion : {
67
+ initial : "gettingActiveTemplateVersion" ,
68
+ states : {
69
+ gettingActiveTemplateVersion : {
70
+ invoke : {
71
+ src : "getActiveTemplateVersion" ,
72
+ onDone : [
73
+ {
74
+ actions : "assignActiveTemplateVersion" ,
62
75
target : "success" ,
63
76
} ,
64
- } ,
77
+ ] ,
65
78
} ,
66
- success : { type : "final" } ,
79
+ } ,
80
+ success : {
81
+ type : "final" ,
67
82
} ,
68
83
} ,
69
- templateResources : {
70
- initial : "gettingTemplateResources" ,
71
- states : {
72
- gettingTemplateResources : {
73
- invoke : {
74
- src : "getTemplateResources" ,
75
- onDone : {
76
- actions : [ "assignTemplateResources" ] ,
84
+ } ,
85
+ templateResources : {
86
+ initial : "gettingTemplateResources" ,
87
+ states : {
88
+ gettingTemplateResources : {
89
+ invoke : {
90
+ src : "getTemplateResources" ,
91
+ onDone : [
92
+ {
93
+ actions : "assignTemplateResources" ,
77
94
target : "success" ,
78
95
} ,
79
- } ,
96
+ ] ,
80
97
} ,
81
- success : { type : "final" } ,
98
+ } ,
99
+ success : {
100
+ type : "final" ,
82
101
} ,
83
102
} ,
84
- templateVersions : {
85
- initial : "gettingTemplateVersions" ,
86
- states : {
87
- gettingTemplateVersions : {
88
- invoke : {
89
- src : "getTemplateVersions" ,
90
- onDone : {
91
- actions : [ "assignTemplateVersions" ] ,
103
+ } ,
104
+ templateVersions : {
105
+ initial : "gettingTemplateVersions" ,
106
+ states : {
107
+ gettingTemplateVersions : {
108
+ invoke : {
109
+ src : "getTemplateVersions" ,
110
+ onDone : [
111
+ {
112
+ actions : "assignTemplateVersions" ,
92
113
target : "success" ,
93
114
} ,
94
- } ,
115
+ ] ,
95
116
} ,
96
- success : { type : "final" } ,
117
+ } ,
118
+ success : {
119
+ type : "final" ,
97
120
} ,
98
121
} ,
99
122
} ,
100
123
} ,
101
- loaded : { } ,
124
+ onDone : {
125
+ target : "loaded" ,
126
+ } ,
102
127
} ,
103
- } ,
104
- {
105
- services : {
106
- getTemplate : ( ctx ) => getTemplateByName ( ctx . organizationId , ctx . templateName ) ,
107
- getActiveTemplateVersion : ( ctx ) => {
108
- if ( ! ctx . template ) {
109
- throw new Error ( "Template not loaded" )
110
- }
111
-
112
- return getTemplateVersion ( ctx . template . active_version_id )
128
+ loaded : {
129
+ on : {
130
+ DELETE : {
131
+ target : "confirmingDelete" ,
132
+ } ,
113
133
} ,
114
- getTemplateResources : ( ctx ) => {
115
- if ( ! ctx . template ) {
116
- throw new Error ( "Template not loaded" )
117
- }
118
-
119
- return getTemplateVersionResources ( ctx . template . active_version_id )
134
+ } ,
135
+ confirmingDelete : {
136
+ on : {
137
+ CONFIRM_DELETE : {
138
+ target : "deleting" ,
139
+ } ,
140
+ CANCEL_DELETE : {
141
+ target : "loaded" ,
142
+ } ,
120
143
} ,
121
- getTemplateVersions : ( ctx ) => {
122
- if ( ! ctx . template ) {
123
- throw new Error ( "Template not loaded" )
124
- }
125
-
126
- return getTemplateVersions ( ctx . template . id )
144
+ } ,
145
+ deleting : {
146
+ entry : "clearDeleteTemplateError" ,
147
+ invoke : {
148
+ src : "deleteTemplate" ,
149
+ id : "deleteTemplate" ,
150
+ onDone : [
151
+ {
152
+ target : "deleted" ,
153
+ } ,
154
+ ] ,
155
+ onError : [
156
+ {
157
+ actions : "assignDeleteTemplateError" ,
158
+ target : "loaded" ,
159
+ } ,
160
+ ] ,
127
161
} ,
128
162
} ,
129
- actions : {
130
- assignTemplate : assign ( {
131
- template : ( _ , event ) => event . data ,
132
- } ) ,
133
- assignActiveTemplateVersion : assign ( {
134
- activeTemplateVersion : ( _ , event ) => event . data ,
135
- } ) ,
136
- assignTemplateResources : assign ( {
137
- templateResources : ( _ , event ) => event . data ,
138
- } ) ,
139
- assignTemplateVersions : assign ( {
140
- templateVersions : ( _ , event ) => event . data ,
141
- } ) ,
163
+ deleted : {
164
+ type : "final" ,
142
165
} ,
143
166
} ,
144
- )
167
+ } ,
168
+ {
169
+ services : {
170
+ getTemplate : ( ctx ) => getTemplateByName ( ctx . organizationId , ctx . templateName ) ,
171
+ getActiveTemplateVersion : ( ctx ) => {
172
+ if ( ! ctx . template ) {
173
+ throw new Error ( "Template not loaded" )
174
+ }
175
+
176
+ return getTemplateVersion ( ctx . template . active_version_id )
177
+ } ,
178
+ getTemplateResources : ( ctx ) => {
179
+ if ( ! ctx . template ) {
180
+ throw new Error ( "Template not loaded" )
181
+ }
182
+
183
+ return getTemplateVersionResources ( ctx . template . active_version_id )
184
+ } ,
185
+ getTemplateVersions : ( ctx ) => {
186
+ if ( ! ctx . template ) {
187
+ throw new Error ( "Template not loaded" )
188
+ }
189
+
190
+ return getTemplateVersions ( ctx . template . id )
191
+ } ,
192
+ deleteTemplate : ( ctx ) => {
193
+ if ( ! ctx . template ) {
194
+ throw new Error ( "Template not loaded" )
195
+ }
196
+ return deleteTemplate ( ctx . template . id )
197
+ } ,
198
+ } ,
199
+ actions : {
200
+ assignTemplate : assign ( {
201
+ template : ( _ , event ) => event . data ,
202
+ } ) ,
203
+ assignActiveTemplateVersion : assign ( {
204
+ activeTemplateVersion : ( _ , event ) => event . data ,
205
+ } ) ,
206
+ assignTemplateResources : assign ( {
207
+ templateResources : ( _ , event ) => event . data ,
208
+ } ) ,
209
+ assignTemplateVersions : assign ( {
210
+ templateVersions : ( _ , event ) => event . data ,
211
+ } ) ,
212
+ assignDeleteTemplateError : assign ( {
213
+ deleteTemplateError : ( _ , event ) => event . data ,
214
+ } ) ,
215
+ clearDeleteTemplateError : assign ( {
216
+ deleteTemplateError : ( _ ) => undefined ,
217
+ } ) ,
218
+ } ,
219
+ } ,
220
+ )
0 commit comments