From 5df2435892d4961a844637bb611e5f9a8710e75d Mon Sep 17 00:00:00 2001 From: OscarDHdz Date: Fri, 22 Oct 2021 08:23:43 -0500 Subject: [PATCH] Scaffolder: Enable buttons if template fails to execute Signed-off-by: OscarDHdz --- .changeset/green-tips-eat.md | 5 +++++ .../components/MultistepJsonForm/MultistepJsonForm.tsx | 9 ++++++--- .../src/components/TemplatePage/TemplatePage.tsx | 2 ++ 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 .changeset/green-tips-eat.md diff --git a/.changeset/green-tips-eat.md b/.changeset/green-tips-eat.md new file mode 100644 index 0000000000..b8c631fbf4 --- /dev/null +++ b/.changeset/green-tips-eat.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Scaffolder: Enable back Template action buttons if template fails to execute diff --git a/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx b/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx index 62c2881ab0..f292d4e179 100644 --- a/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx +++ b/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx @@ -44,7 +44,7 @@ type Props = { formData: Record; onChange: (e: IChangeEvent) => void; onReset: () => void; - onFinish: () => void; + onFinish: () => Promise; widgets?: FormProps['widgets']; fields?: FormProps['fields']; }; @@ -122,9 +122,12 @@ export const MultistepJsonForm = ({ setActiveStep(Math.min(activeStep + 1, steps.length)); }; const handleBack = () => setActiveStep(Math.max(activeStep - 1, 0)); - const handleCreate = () => { + const handleCreate = async () => { setDisableButtons(true); - onFinish(); + const success = await onFinish(); + if (!success) { + setDisableButtons(false); + } }; return ( diff --git a/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx b/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx index 05533376db..7b6a217543 100644 --- a/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx +++ b/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx @@ -132,8 +132,10 @@ export const TemplatePage = ({ const id = await scaffolderApi.scaffold(templateName, formState); navigate(generatePath(`${rootLink()}/tasks/:taskId`, { taskId: id })); + return true; } catch (e) { errorApi.post(e); + return false; } };