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

Skip to content

Commit 6831f8b

Browse files
committed
fix: display error if template not found
Previously, we weren't handling a case where we tried to get a template that returned a 404 from the backend. Now we handle that case in our state machine and display the error message from the API on the frontend.
1 parent 6d3f2cf commit 6831f8b

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

site/src/pages/TemplatePage/TemplatePage.tsx

+21
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
import { makeStyles } from "@material-ui/core/styles"
12
import { useMachine, useSelector } from "@xstate/react"
23
import { DeleteDialog } from "components/Dialogs/DeleteDialog/DeleteDialog"
4+
import { ErrorSummary } from "components/ErrorSummary/ErrorSummary"
5+
import { Margins } from "components/Margins/Margins"
36
import { FC, useContext } from "react"
47
import { Helmet } from "react-helmet-async"
58
import { useTranslation } from "react-i18next"
@@ -23,6 +26,7 @@ const useTemplateName = () => {
2326
}
2427

2528
export const TemplatePage: FC<React.PropsWithChildren<unknown>> = () => {
29+
const styles = useStyles()
2630
const organizationId = useOrganizationId()
2731
const { t } = useTranslation("templatePage")
2832
const templateName = useTemplateName()
@@ -40,6 +44,7 @@ export const TemplatePage: FC<React.PropsWithChildren<unknown>> = () => {
4044
templateVersions,
4145
deleteTemplateError,
4246
templateDAUs,
47+
getTemplateError,
4348
} = templateState.context
4449
const xServices = useContext(XServiceContext)
4550
const permissions = useSelector(xServices.authXService, selectPermissions)
@@ -50,6 +55,16 @@ export const TemplatePage: FC<React.PropsWithChildren<unknown>> = () => {
5055
templateSend("DELETE")
5156
}
5257

58+
if (templateState.matches("error") && Boolean(getTemplateError)) {
59+
return (
60+
<Margins>
61+
<div className={styles.errorBox}>
62+
<ErrorSummary error={getTemplateError} />
63+
</div>
64+
</Margins>
65+
)
66+
}
67+
5368
if (isLoading) {
5469
return <Loader />
5570
}
@@ -90,4 +105,10 @@ export const TemplatePage: FC<React.PropsWithChildren<unknown>> = () => {
90105
)
91106
}
92107

108+
const useStyles = makeStyles((theme) => ({
109+
errorBox: {
110+
padding: theme.spacing(3),
111+
},
112+
}))
113+
93114
export default TemplatePage

site/src/xServices/template/templateXService.ts

+13
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ interface TemplateContext {
2525
templateVersions?: TemplateVersion[]
2626
templateDAUs: TemplateDAUsResponse
2727
deleteTemplateError?: Error | unknown
28+
getTemplateError?: Error | unknown
2829
}
2930

3031
type TemplateEvent = { type: "DELETE" } | { type: "CONFIRM_DELETE" } | { type: "CANCEL_DELETE" }
@@ -71,6 +72,12 @@ export const templateMachine =
7172
target: "initialInfo",
7273
},
7374
],
75+
onError: [
76+
{
77+
actions: "assignGetTemplateError",
78+
target: "error",
79+
},
80+
],
7481
},
7582
},
7683
initialInfo: {
@@ -211,6 +218,9 @@ export const templateMachine =
211218
deleted: {
212219
type: "final",
213220
},
221+
error: {
222+
type: "final",
223+
},
214224
},
215225
},
216226
{
@@ -257,6 +267,9 @@ export const templateMachine =
257267
assignActiveTemplateVersion: assign({
258268
activeTemplateVersion: (_, event) => event.data,
259269
}),
270+
assignGetTemplateError: assign({
271+
getTemplateError: (_, event) => event.data,
272+
}),
260273
assignTemplateResources: assign({
261274
templateResources: (_, event) => event.data,
262275
}),

0 commit comments

Comments
 (0)