fix(site): Show job error on updating template variables (#6674)

This commit is contained in:
Bruno Quaresma
2023-03-20 12:51:59 -03:00
committed by GitHub
parent de83723310
commit cb846bab46
5 changed files with 81 additions and 43 deletions

View File

@ -6,7 +6,6 @@ import {
PageHeaderSubtitle, PageHeaderSubtitle,
} from "components/PageHeader/PageHeader" } from "components/PageHeader/PageHeader"
import Button from "@material-ui/core/Button" import Button from "@material-ui/core/Button"
import { makeStyles } from "@material-ui/core/styles"
export interface FullPageHorizontalFormProps { export interface FullPageHorizontalFormProps {
title: string title: string
@ -17,8 +16,6 @@ export interface FullPageHorizontalFormProps {
export const FullPageHorizontalForm: FC< export const FullPageHorizontalForm: FC<
React.PropsWithChildren<FullPageHorizontalFormProps> React.PropsWithChildren<FullPageHorizontalFormProps>
> = ({ title, detail, onCancel, children }) => { > = ({ title, detail, onCancel, children }) => {
const styles = useStyles()
return ( return (
<Margins size="medium"> <Margins size="medium">
<PageHeader <PageHeader
@ -34,13 +31,7 @@ export const FullPageHorizontalForm: FC<
{detail && <PageHeaderSubtitle>{detail}</PageHeaderSubtitle>} {detail && <PageHeaderSubtitle>{detail}</PageHeaderSubtitle>}
</PageHeader> </PageHeader>
<main className={styles.form}>{children}</main> <main>{children}</main>
</Margins> </Margins>
) )
} }
const useStyles = makeStyles((theme) => ({
form: {
marginTop: theme.spacing(1),
},
}))

View File

@ -36,6 +36,7 @@ export const TemplateVariablesPage: FC = () => {
templateVariables, templateVariables,
getTemplateDataError, getTemplateDataError,
updateTemplateError, updateTemplateError,
jobError,
} = state.context } = state.context
const { t } = useTranslation("templateVariablesPage") const { t } = useTranslation("templateVariablesPage")
@ -52,6 +53,7 @@ export const TemplateVariablesPage: FC = () => {
errors={{ errors={{
getTemplateDataError, getTemplateDataError,
updateTemplateError, updateTemplateError,
jobError,
}} }}
onCancel={() => { onCancel={() => {
navigate(`/templates/${templateName}`) navigate(`/templates/${templateName}`)

View File

@ -76,3 +76,20 @@ WithUpdateTemplateError.args = {
onSubmit: action("onSubmit"), onSubmit: action("onSubmit"),
onCancel: action("cancel"), onCancel: action("cancel"),
} }
export const WithJobError = TemplateVariables.bind({})
WithJobError.args = {
templateVersion: MockTemplateVersion,
templateVariables: [
MockTemplateVersionVariable1,
MockTemplateVersionVariable2,
MockTemplateVersionVariable3,
MockTemplateVersionVariable4,
],
errors: {
jobError:
"template import provision for start: recv import provision: plan terraform: terraform plan: exit status 1",
},
onSubmit: action("onSubmit"),
onCancel: action("cancel"),
}

View File

@ -22,6 +22,7 @@ export interface TemplateVariablesPageViewProps {
errors?: { errors?: {
getTemplateDataError?: unknown getTemplateDataError?: unknown
updateTemplateError?: unknown updateTemplateError?: unknown
jobError?: TemplateVersion["job"]["error"]
} }
initialTouched?: ComponentProps< initialTouched?: ComponentProps<
typeof TemplateVariablesForm typeof TemplateVariablesForm
@ -46,6 +47,7 @@ export const TemplateVariablesPageView: FC<TemplateVariablesPageViewProps> = ({
const { t } = useTranslation("templateVariablesPage") const { t } = useTranslation("templateVariablesPage")
return ( return (
<>
<FullPageHorizontalForm title={t("title")} onCancel={onCancel}> <FullPageHorizontalForm title={t("title")} onCancel={onCancel}>
{Boolean(errors.getTemplateDataError) && ( {Boolean(errors.getTemplateDataError) && (
<Stack className={classes.errorContainer}> <Stack className={classes.errorContainer}>
@ -57,8 +59,15 @@ export const TemplateVariablesPageView: FC<TemplateVariablesPageViewProps> = ({
<AlertBanner severity="error" error={errors.updateTemplateError} /> <AlertBanner severity="error" error={errors.updateTemplateError} />
</Stack> </Stack>
)} )}
{Boolean(errors.jobError) && (
<Stack className={classes.errorContainer}>
<AlertBanner severity="error" text={errors.jobError} />
</Stack>
)}
{isLoading && <Loader />} {isLoading && <Loader />}
{templateVersion && templateVariables && templateVariables.length > 0 && ( {templateVersion &&
templateVariables &&
templateVariables.length > 0 && (
<TemplateVariablesForm <TemplateVariablesForm
initialTouched={initialTouched} initialTouched={initialTouched}
isSubmitting={isSubmitting} isSubmitting={isSubmitting}
@ -78,12 +87,13 @@ export const TemplateVariablesPageView: FC<TemplateVariablesPageViewProps> = ({
</div> </div>
)} )}
</FullPageHorizontalForm> </FullPageHorizontalForm>
</>
) )
} }
const useStyles = makeStyles((theme) => ({ const useStyles = makeStyles((theme) => ({
errorContainer: { errorContainer: {
marginBottom: theme.spacing(2), marginBottom: theme.spacing(8),
}, },
goBackSection: { goBackSection: {
display: "flex", display: "flex",

View File

@ -28,6 +28,8 @@ type TemplateVariablesContext = {
getTemplateDataError?: Error | unknown getTemplateDataError?: Error | unknown
updateTemplateError?: Error | unknown updateTemplateError?: Error | unknown
jobError?: TemplateVersion["job"]["error"]
} }
type UpdateTemplateEvent = { type UpdateTemplateEvent = {
@ -117,7 +119,7 @@ export const templateVariablesMachine = createMachine(
fillingParams: { fillingParams: {
on: { on: {
UPDATE_TEMPLATE_EVENT: { UPDATE_TEMPLATE_EVENT: {
actions: ["assignCreateTemplateVersionRequest"], actions: ["assignCreateTemplateVersionRequest", "clearJobError"],
target: "creatingTemplateVersion", target: "creatingTemplateVersion",
}, },
}, },
@ -141,6 +143,11 @@ export const templateVariablesMachine = createMachine(
invoke: { invoke: {
src: "waitForJobToBeCompleted", src: "waitForJobToBeCompleted",
onDone: [ onDone: [
{
target: "fillingParams",
cond: "hasJobError",
actions: ["assignJobError"],
},
{ {
actions: ["assignNewTemplateVersion"], actions: ["assignNewTemplateVersion"],
target: "updatingTemplate", target: "updatingTemplate",
@ -258,6 +265,17 @@ export const templateVariablesMachine = createMachine(
clearUpdateTemplateError: assign({ clearUpdateTemplateError: assign({
updateTemplateError: (_) => undefined, updateTemplateError: (_) => undefined,
}), }),
assignJobError: assign({
jobError: (_, event) => event.data.job.error,
}),
clearJobError: assign({
jobError: (_) => undefined,
}),
},
guards: {
hasJobError: (_, { data }) => {
return Boolean(data.job.error)
},
}, },
}, },
) )