Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a9f3e18

Browse files
committed
Fix steps
1 parent fe71988 commit a9f3e18

File tree

1 file changed

+80
-29
lines changed

1 file changed

+80
-29
lines changed

site/src/xServices/createTemplate/createTemplateXService.ts

Lines changed: 80 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
uploadTemplateFile,
88
} from "api/api"
99
import {
10-
CreateTemplateRequest,
10+
CreateTemplateVersionRequest,
1111
ParameterSchema,
1212
Template,
1313
TemplateExample,
@@ -53,7 +53,7 @@ interface CreateTemplateContext {
5353
}
5454

5555
export const createTemplateMachine =
56-
/** @xstate-layout N4IgpgJg5mDOIC5QGMBOYCGAXMAVMAtgA4A22YAdLFhqlgJYB2UAxANoAMAuoqEQPax6Dfo14gAHogCMAVgDMFDgA5ZATnkKALADY9AdgA0IAJ6I1AJmkVlyi-tk79F2bI4c1AX0-G0mHPjEZDhUNHRMrGzSPEggAkIiYrFSCHKKKuqa8roGxmYI+u4UWgoq0lpqOvJO0t6+6OSBpOQUJPwYEBEAymE4qE3BYCwQopRMAG78ANaUfo2EzSFtHd29YP0LgwgT-MjY9KKcXEfi8cIHSaApOhaK+vrZ8mocOnLK+mp5iMrSyhRqpWUHC0Wh++mUdRAcwCmxay06zB6tD6A3ILHWqH4qAoiwAZliCBRoXhYUt2gioEi6OtUThtoxJntEkcTrEzolxNdbhR7o9nq9ZO9PqZzNILMUXtI1NKAfYtPpIcTaWMICQhgBhABKAFEAIK4bWsviCc6iTmIWQWL4IWT3YoKMWuCzuLQWCE+KENGFBFrQiJEr0RABi9FQ1AAaushKJhqMKDsZgH-CSfSE-cwk-tmCGw1hI2GLvTGftDtwjXETRzkog3X8bm5neplBo3EYRalnBR5PoKs8OBYdGoHLJFV6U4tZoGM+moDmI1GLujUJjsXiCZnvRON-6Z3O8wvREXdiXGCzuKdKxdzalbTp-g7dBxpA9KsL8q6tP99DpZFp5FYOEcCxR2TZVtwzAB3DBzmzLEACl+AAI1wfgACEwHVfggjAHAIFjRgxgZaZJ1A0kSKzKAKCgmDZ3gpCUPQzDsNwo8mQuM8YmNBIr2rAp5GsNQSjleQRMAnRlGtOQOH+GUHAsUEQWkV4QPmVNyIYSDoI02jUAQ5C0IwrDSBwyB8MIyZEyVMjwMo6jtKDOj9MYoy1RYnY2NLY5ogvbizV4h4BKEnsRPkMSJPbexrB7aVlEeQppHkd16lItSbKorTg0chjDOY0yMSxHFgnxVBCSs1KZ3SmiHN0+iDKY4y3KIjzTzLc82UvPyrhkW9734x9nyeQdrRE6xLREywNGbHQOAVD0yq3CqiExYgsAABVoDACBMsMWHVAB5AA5XAAEkDoAVUNNquNNS5JBkKw1AoX4e37Ac3VuSTO3lH9bVcD4LFuJLPRShap0omdlTM+MiMsscwIqiGyNYk8OJ8m7rzkb9evKaaBtfa1lDvWx+wSwmny0GbZuS1TQf8Hcwch-LVyK9d5sGNLEbU5HmVaziK1826Ukxu8AT63GXyG9tfmkkKQop5xu1cbwPUYfgIDgcQ2fINGqy6hAAFo30QfXuRlM3zbUIGtZCahkQiHWeL111rTUBKeSUlRvw0AE9BUzd2fhVZkRpMiHc6u6EGqfQno+Qdm2+qoQQJyoKCqexZGkFQnmBP3x3Z+hVTAMPBZkYKKHsbJpsE1xnyNm07VF6RM8xj4c7muHrJnYvryea0qmKc3ynUTOn1z+GwZsvd82jW72UdiP3kk1QnqfVxAPBH43CtjvyonuzMpqpycoayBu94kFHoUzRf3439LB0T7pNUOQ3EqWOXh0MfO4npajLWjatp9HgO1AWGN+x-A3hoMUdhYryU+uKIcP1hz-UBl-XedNpwM1DiA9GvEEqvC7JoWwLhoH6ClJJHQn5XCWx7C4P8P55BoNpuQCAZ89bPkzjYGBVgLBDlihweQkkZqpxeLyX8Vhmy1GVkAA */
56+
/** @xstate-layout N4IgpgJg5mDOIC5QGMBOYCGAXMAVMAtgA4A22YAdLFhqlgJYB2UAxANoAMAuoqEQPax6Dfo14gAHogCMAVgDMFDgA5ZATlkAWaR1kA2TcukAaEAE9E8jgCYKa62r0B2Wao7zlatQF9vptJg4+MRkOFQ0dEysbNI8SCACQiJi8VIIcooq6lo6+oYm5ohGFJpeXk7W1h5O8nK+-ujkwaTkFCT8GBBRAMoROKjNoWAsEKKUTABu-ADWlAFNhC1h7Z09fWADi0MIk-zI2PSinFzH4onChymgaXpVFE41mq6aHJpO5aYW6V52ZWo10mssmkymUTnqIHmQS2rRWXWYvVo-UG5BYG1Q-FQFCWADNMQQKFC8DDlh14VBEXQNiicDtGFN9sljqd4udkuIbncHvInsoXm8PoUEA5FE9arprAZHHplBCiTTxhASMMAMIAJQAogBBXAall8QQXUQcxCyayfGRmtQlDg6TR6eRS+SVOWNaEhVr0JXDACqAAUADIAeS1ABEAPoAMQAkgG9dwzob2alENZtPcefI1PInG8OI5zUKPHo7Bxbgp3qCVKpXYFiR6wl7lSxNQBZIMANQ1Udj8biBqSlxNCHkOc0SmzaiMwOkTnzFvSmh5FCs7w4lb0OgetYWDcoAFdSGSoiMxhRdrNCW760sD0fVsw6QyDkduPqEkmhynhenHlmx3OBYLoYijyOoHjSGoKgvPmO7ureFCHnCJ7opi2KhHiqAEvKJJ3shj67IylzMgmrKfsa35AtY0glAoVSAtIjGzgushOCWRhpp4yh6NBoJwTeQxXoEURCQczCRvQqDUB2GxCKIp6MOM9IzHM14KqJDDMBpUQSVJWAyVJlxPnsL6MCR-YfoOFHXIg7yKA61jKB4CjSKOzoLnaJbUU81gqOuHg5vx6lQiJIXiZJ0myZcaKoBiWK4viGkCa0YVQNp4V6QZcmMMZRGvicpEDkaVySKmZo0WK9HUUxTgeTytilKUjG3I5VFBbh6VpQA7hgFziZiABS-AAEa4PwABCYAqvwIRgDgEAKUpUyXjhe6dRQPV9VAkaDSNY2TdNs3zblpnmYmVklWk0gvA1bGuNYgGuTmHm6CWThGCCDjQfmsp+JCakdalG29Zp227aNE1TTNpBzZAi3nspK0A2tQObaDO2oENEMHdDyrHYRp1vrE53FcOQK1LRzq1NVjG1UKa4UM4IIKDyLxyLI7Uo26Ilozp4P7VDR1w6MikI8tql1sF3Nabz-WY3tkOHTD+PKXlZlvtYFlsl+NmLjYJR3coD35k9dNfI4oGOeupSyOoLWcwhqMg3z8vY4Lytw6h8UYYlq2O9L3XO3LWMC0reOQCdTJvoVlmk5R5WU1VTHMUKoLjoCpSbg4BgOpoDuCUD+FQK29CwEIzB+rQGAELDUnwxeEu7v7wlaUXJdl1EleoNXtewJHxHR1r5GXTIm4lhwE8SvYVggvIdWuIzuaaNRViaE14J-X7BcB20x7MO35dQF3Pf9LAMVxeh2CYdhyPN2JaVt6Xh-HzXp-9-l77a9ZpXCgnlXU8nM2MglyyDsIYW0GgXAPXkPnFKO8iAYmIFgF+vcWDqm1LqT+w8yZGxXFOJcLxQR6FkNBBc2YnBKEYoQkC2gniwLCEDVKWVLgAHVhAAAsUGn3rojRu8Ft4tzSkwqKog2FYE4VXV+sl37qwKkPC6w47KM2dE5VQtQ3KFnNmae4m5tCOS0NmVw9C+GhQDsw0RHCuGyXPmhBKWEkpS0EZ1cxjAxESO7lIqSMizpkQUfHdM-8GI1QXHof4FBqJgjFGoOQzgN4NEloDHeqUFQ8PFg4xJTjkm4W8YPEmyZdYr3HhPaQPFHKGD5EAhATlQFgTkHIB6kowQc03rfAR99OopK9pfLA190lc0yQHBUOS5F5J1j-KiFU6IAOCUKf4FDWLKDLPYQw0TXK+D+owfgEA4DiC3uQUZ380gAFo1ALiOaAv4ly-gGGafEpuglqBIiiAckeCBl4LgcOONiVhbTODBCU66xjd4PgpOsTYe4XnDkdBQ2c-x8wTx5PmN4HyHiL0cC4Kw913hAqbGASFlEvDjloQ9KC3FPD2g8goUBbEdCOnzPoMoQKkJ7ygPi3W7yhQChXGBbMD05Dri8DAlpCT+n3zZT-LMC5cwUNUBkVw7hZxgSBYwgOulIqGW-l-V5tsODhOIQYJF3FIKaJkLPcJmY1CGGBHyewyqd6yzBq7UOuNYYQHFVdLIFASnaEYloMsQIXoOEZuuRZVqpxODqMK+5cCnGPw7hXSRvd3UyG4uOfBS5JTaA8K8Oq6YqhLgqDYR09ohV3P4TG9pCDobIMTafZNVTKmuRcEoWJVLNysVtnagZgiXFuKsVJet4ClBzlqFBEhHg3iaDIY6OwYIpyOHArcOJ-0RV31Bh03C9aQT2AoKo5wy9OIRrIZuXdrwc66Dck5Lt7SiRut8XHApiL7gKoeLcRZjEFyqHHu9fMAUYK1HWd4IAA */
5757
createMachine(
5858
{
5959
id: "createTemplate",
@@ -74,6 +74,9 @@ export const createTemplateMachine =
7474
createFirstVersion: {
7575
data: TemplateVersion
7676
}
77+
createVersionWithParameters: {
78+
data: TemplateVersion
79+
}
7780
waitForJobToBeCompleted: {
7881
data: TemplateVersion
7982
}
@@ -118,9 +121,11 @@ export const createTemplateMachine =
118121
UPLOAD_FILE: {
119122
actions: ["assignFile"],
120123
target: "uploading",
124+
cond: "isFromScratch",
121125
},
122126
REMOVE_FILE: {
123127
actions: ["removeFile"],
128+
cond: "hasFile",
124129
},
125130
},
126131
},
@@ -194,11 +199,25 @@ export const createTemplateMachine =
194199
promptParameters: {
195200
on: {
196201
CREATE: {
197-
target: "creatingTemplate",
202+
target: "creatingVersionWithParameters",
198203
actions: ["assignTemplateData"],
199204
},
200205
},
201206
},
207+
creatingVersionWithParameters: {
208+
invoke: {
209+
src: "createVersionWithParameters",
210+
onDone: {
211+
target: "waitingForJobToBeCompleted",
212+
actions: ["assignVersion"],
213+
},
214+
onError: {
215+
actions: ["assignError"],
216+
target: "promptParameters",
217+
},
218+
},
219+
tags: ["submitting"],
220+
},
202221
creatingTemplate: {
203222
invoke: {
204223
src: "createTemplate",
@@ -236,15 +255,65 @@ export const createTemplateMachine =
236255
}
237256
return starterTemplate
238257
},
239-
createFirstVersion: async ({ organizationId, exampleId }) => {
240-
if (!exampleId) {
241-
throw new Error("No example ID provided")
258+
createFirstVersion: async ({
259+
organizationId,
260+
exampleId,
261+
uploadResponse,
262+
}) => {
263+
if (exampleId) {
264+
return createTemplateVersion(organizationId, {
265+
storage_method: "file",
266+
example_id: exampleId,
267+
provisioner: "terraform",
268+
tags: {},
269+
})
270+
}
271+
272+
if (uploadResponse) {
273+
return createTemplateVersion(organizationId, {
274+
storage_method: "file",
275+
file_id: uploadResponse.hash,
276+
provisioner: "terraform",
277+
tags: {},
278+
})
279+
}
280+
281+
throw new Error("No file or example provided")
282+
},
283+
createVersionWithParameters: async ({
284+
organizationId,
285+
parameters,
286+
templateData,
287+
version,
288+
}) => {
289+
if (!version) {
290+
throw new Error("No previous version found")
291+
}
292+
if (!templateData) {
293+
throw new Error("No template data defined")
294+
}
295+
296+
const { parameter_values_by_name } = templateData
297+
// Get parameter values if they are needed/present
298+
const parameterValues: CreateTemplateVersionRequest["parameter_values"] =
299+
[]
300+
if (parameters) {
301+
parameters.forEach((schema) => {
302+
const value = parameter_values_by_name?.[schema.name]
303+
parameterValues.push({
304+
name: schema.name,
305+
source_value: value ?? schema.default_source_value,
306+
destination_scheme: schema.default_destination_scheme,
307+
source_scheme: schema.default_source_scheme,
308+
})
309+
})
242310
}
243311

244312
return createTemplateVersion(organizationId, {
245313
storage_method: "file",
246-
example_id: exampleId,
314+
file_id: version.job.file_id,
247315
provisioner: "terraform",
316+
parameter_values: parameterValues,
248317
tags: {},
249318
})
250319
},
@@ -267,12 +336,7 @@ export const createTemplateMachine =
267336

268337
return getTemplateVersionSchema(version.id)
269338
},
270-
createTemplate: async ({
271-
organizationId,
272-
version,
273-
templateData,
274-
parameters,
275-
}) => {
339+
createTemplate: async ({ organizationId, version, templateData }) => {
276340
if (!version) {
277341
throw new Error("Version not defined")
278342
}
@@ -287,25 +351,10 @@ export const createTemplateMachine =
287351
...safeTemplateData
288352
} = templateData
289353

290-
// Get parameter values if they are needed/present
291-
const parameterValues: CreateTemplateRequest["parameter_values"] = []
292-
if (parameters) {
293-
parameters.forEach((schema) => {
294-
const value = parameter_values_by_name?.[schema.name]
295-
parameterValues.push({
296-
name: schema.name,
297-
source_value: value ?? schema.default_source_value,
298-
destination_scheme: schema.default_destination_scheme,
299-
source_scheme: schema.default_source_scheme,
300-
})
301-
})
302-
}
303-
304354
return createTemplate(organizationId, {
305355
...safeTemplateData,
306356
default_ttl_ms: templateData.default_ttl_hours * 60 * 60 * 1000, // Convert hours to ms
307357
template_version_id: version.id,
308-
parameter_values: parameterValues,
309358
})
310359
},
311360
},
@@ -331,7 +380,9 @@ export const createTemplateMachine =
331380
}),
332381
},
333382
guards: {
334-
isExampleProvided: ({ exampleId }) => Boolean(exampleId),
383+
isExampleProvided: ({ exampleId }) => exampleId !== undefined,
384+
isFromScratch: ({ exampleId }) => exampleId === undefined,
385+
hasFile: ({ file }) => file !== undefined,
335386
hasFailed: (_, { data }) => data.job.status === "failed",
336387
hasMissingParameters: (_, { data }) =>
337388
Boolean(

0 commit comments

Comments
 (0)