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 df5be2de56..738e1f894a 100644 --- a/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx +++ b/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx @@ -24,6 +24,7 @@ import { Stepper, Typography, } from '@material-ui/core'; +import { errorApiRef, useApi } from '@backstage/core-plugin-api'; import { FormProps, IChangeEvent, UiSchema, withTheme } from '@rjsf/core'; import { Theme as MuiTheme } from '@rjsf/material-ui'; import React, { useState } from 'react'; @@ -44,7 +45,7 @@ type Props = { formData: Record; onChange: (e: IChangeEvent) => void; onReset: () => void; - onFinish: () => void; + onFinish: () => Promise; widgets?: FormProps['widgets']; fields?: FormProps['fields']; }; @@ -113,6 +114,7 @@ export const MultistepJsonForm = ({ }: Props) => { const [activeStep, setActiveStep] = useState(0); const [disableButtons, setDisableButtons] = useState(false); + const errorApi = useApi(errorApiRef); const handleReset = () => { setActiveStep(0); @@ -122,9 +124,14 @@ 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(); + try { + await onFinish(); + } catch (err) { + setDisableButtons(false); + errorApi.post(err); + } }; return ( diff --git a/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx b/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx index 0ea53212c2..3f70f4effd 100644 --- a/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx +++ b/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx @@ -128,13 +128,8 @@ export const TemplatePage = ({ ); const handleCreate = async () => { - try { - const id = await scaffolderApi.scaffold(templateName, formState); - - navigate(generatePath(`${rootLink()}/tasks/:taskId`, { taskId: id })); - } catch (e) { - errorApi.post(e); - } + const id = await scaffolderApi.scaffold(templateName, formState); + navigate(generatePath(`${rootLink()}/tasks/:taskId`, { taskId: id })); }; if (error) {