Skip to content

feat: add open in coder docs, fix missing templates #4124

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Sep 22, 2022
Prev Previous commit
Next Next commit
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.
  • Loading branch information
jsjoeio committed Sep 20, 2022
commit 09b3d7e4ad5565ebd92d170839f35a860ae0f45e
21 changes: 21 additions & 0 deletions site/src/pages/TemplatePage/TemplatePage.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import { makeStyles } from "@material-ui/core/styles"
import { useMachine, useSelector } from "@xstate/react"
import { DeleteDialog } from "components/Dialogs/DeleteDialog/DeleteDialog"
import { ErrorSummary } from "components/ErrorSummary/ErrorSummary"
import { Margins } from "components/Margins/Margins"
import { FC, useContext } from "react"
import { Helmet } from "react-helmet-async"
import { useTranslation } from "react-i18next"
Expand All @@ -23,6 +26,7 @@ const useTemplateName = () => {
}

export const TemplatePage: FC<React.PropsWithChildren<unknown>> = () => {
const styles = useStyles()
const organizationId = useOrganizationId()
const { t } = useTranslation("templatePage")
const templateName = useTemplateName()
Expand All @@ -40,6 +44,7 @@ export const TemplatePage: FC<React.PropsWithChildren<unknown>> = () => {
templateVersions,
deleteTemplateError,
templateDAUs,
getTemplateError,
} = templateState.context
const xServices = useContext(XServiceContext)
const permissions = useSelector(xServices.authXService, selectPermissions)
Expand All @@ -50,6 +55,16 @@ export const TemplatePage: FC<React.PropsWithChildren<unknown>> = () => {
templateSend("DELETE")
}

if (templateState.matches("error") && Boolean(getTemplateError)) {
return (
<Margins>
<div className={styles.errorBox}>
<ErrorSummary error={getTemplateError} />
</div>
</Margins>
)
}

if (isLoading) {
return <Loader />
}
Expand Down Expand Up @@ -90,4 +105,10 @@ export const TemplatePage: FC<React.PropsWithChildren<unknown>> = () => {
)
}

const useStyles = makeStyles((theme) => ({
errorBox: {
padding: theme.spacing(3),
},
}))

export default TemplatePage
13 changes: 13 additions & 0 deletions site/src/xServices/template/templateXService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ interface TemplateContext {
templateVersions?: TemplateVersion[]
templateDAUs: TemplateDAUsResponse
deleteTemplateError?: Error | unknown
getTemplateError?: Error | unknown
}

type TemplateEvent = { type: "DELETE" } | { type: "CONFIRM_DELETE" } | { type: "CANCEL_DELETE" }
Expand Down Expand Up @@ -71,6 +72,12 @@ export const templateMachine =
target: "initialInfo",
},
],
onError: [
{
actions: "assignGetTemplateError",
target: "error",
},
],
},
},
initialInfo: {
Expand Down Expand Up @@ -211,6 +218,9 @@ export const templateMachine =
deleted: {
type: "final",
},
error: {
type: "final",
},
},
},
{
Expand Down Expand Up @@ -257,6 +267,9 @@ export const templateMachine =
assignActiveTemplateVersion: assign({
activeTemplateVersion: (_, event) => event.data,
}),
assignGetTemplateError: assign({
getTemplateError: (_, event) => event.data,
}),
assignTemplateResources: assign({
templateResources: (_, event) => event.data,
}),
Expand Down