Skip to content

Commit 71f8a1d

Browse files
committed
Update xservice to delete
1 parent 90db85d commit 71f8a1d

File tree

1 file changed

+174
-98
lines changed

1 file changed

+174
-98
lines changed
Lines changed: 174 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { assign, createMachine } from "xstate"
22
import {
3+
deleteTemplate,
34
getTemplateByName,
45
getTemplateVersion,
56
getTemplateVersionResources,
@@ -14,131 +15,206 @@ interface TemplateContext {
1415
activeTemplateVersion?: TemplateVersion
1516
templateResources?: WorkspaceResource[]
1617
templateVersions?: TemplateVersion[]
18+
deleteTemplateError?: Error | unknown
1719
}
1820

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+
}
3747
},
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",
4658
target: "initialInfo",
4759
},
48-
},
60+
],
4961
},
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",
6275
target: "success",
6376
},
64-
},
77+
],
6578
},
66-
success: { type: "final" },
79+
},
80+
success: {
81+
type: "final",
6782
},
6883
},
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",
7794
target: "success",
7895
},
79-
},
96+
],
8097
},
81-
success: { type: "final" },
98+
},
99+
success: {
100+
type: "final",
82101
},
83102
},
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",
92113
target: "success",
93114
},
94-
},
115+
],
95116
},
96-
success: { type: "final" },
117+
},
118+
success: {
119+
type: "final",
97120
},
98121
},
99122
},
100123
},
101-
loaded: {},
124+
onDone: {
125+
target: "loaded",
126+
},
102127
},
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+
},
113133
},
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+
},
120143
},
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+
],
127161
},
128162
},
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",
142165
},
143166
},
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

Comments
 (0)