diff --git a/site/src/components/TemplateLayout/TemplateLayout.tsx b/site/src/components/TemplateLayout/TemplateLayout.tsx index cf83b30f9c287..f7df905260566 100644 --- a/site/src/components/TemplateLayout/TemplateLayout.tsx +++ b/site/src/components/TemplateLayout/TemplateLayout.tsx @@ -9,7 +9,6 @@ import { ChooseOne, Cond } from "components/Conditionals/ChooseOne" import { DeleteDialog } from "components/Dialogs/DeleteDialog/DeleteDialog" import { DeleteButton } from "components/DropdownButton/ActionCtas" import { DropdownButton } from "components/DropdownButton/DropdownButton" -import { Loader } from "components/Loader/Loader" import { PageHeader, PageHeaderSubtitle, @@ -53,7 +52,7 @@ const useTemplateName = () => { type TemplateLayoutContextValue = { context: TemplateContext - permissions: Permissions + permissions?: Permissions } const TemplateLayoutContext = createContext< @@ -97,23 +96,23 @@ export const TemplateLayout: FC = ({ children }) => { !templateDAUs || !templatePermissions - if (isLoading) { - return - } - if (templateState.matches("deleted")) { return } - const hasIcon = template.icon && template.icon !== "" + const hasIcon = template && template.icon && template.icon !== "" const createWorkspaceButton = (className?: string) => ( - @@ -128,89 +127,98 @@ export const TemplateLayout: FC = ({ children }) => { - - - - + isLoading ? undefined : ( + + + + + - - ), - }, - ]} - canCancel={false} - /> - + + ), + }, + ]} + canCancel={false} + /> + - {createWorkspaceButton()} - + {createWorkspaceButton()} + + ) } > -
- {hasIcon ? ( -
- -
- ) : ( - - {firstLetter(template.name)} - - )} -
-
- {template.name} - - {template.description === "" - ? Language.noDescription - : template.description} - -
+ {!isLoading && ( +
+ {hasIcon ? ( +
+ +
+ ) : ( + + {firstLetter(templateName)} + + )} +
+ )} + + {!isLoading && ( +
+ {templateName} + + {template.description === "" + ? Language.noDescription + : template.description} + +
+ )}
-
- - - - combineClasses([ - styles.tabItem, - isActive ? styles.tabItemActive : undefined, - ]) - } - > - Summary - - - combineClasses([ - styles.tabItem, - isActive ? styles.tabItemActive : undefined, - ]) - } - > - Permissions - - - -
+ {!isLoading && ( +
+ + + + combineClasses([ + styles.tabItem, + isActive ? styles.tabItemActive : undefined, + ]) + } + > + Summary + + + combineClasses([ + styles.tabItem, + isActive ? styles.tabItemActive : undefined, + ]) + } + > + Permissions + + + +
+ )} = ({ children }) => { - { - templateSend("CONFIRM_DELETE") - }} - onCancel={() => { - templateSend("CANCEL_DELETE") - }} - entity="template" - name={template.name} - /> + {!isLoading && ( + { + templateSend("CONFIRM_DELETE") + }} + onCancel={() => { + templateSend("CANCEL_DELETE") + }} + entity="template" + name={template.name} + /> + )} ) } diff --git a/site/src/pages/TemplatePage/TemplatePermissionsPage/TemplatePermissionsPage.tsx b/site/src/pages/TemplatePage/TemplatePermissionsPage/TemplatePermissionsPage.tsx index 48cc936d0cea4..8d86a9c3b031b 100644 --- a/site/src/pages/TemplatePage/TemplatePermissionsPage/TemplatePermissionsPage.tsx +++ b/site/src/pages/TemplatePage/TemplatePermissionsPage/TemplatePermissionsPage.tsx @@ -13,6 +13,7 @@ import { Helmet } from "react-helmet-async" import { pageTitle } from "util/page" import { templateACLMachine } from "xServices/template/templateACLXService" import { TemplatePermissionsPageView } from "./TemplatePermissionsPageView" +import { Loader } from "components/Loader/Loader" export const TemplatePermissionsPage: FC< React.PropsWithChildren @@ -20,16 +21,14 @@ export const TemplatePermissionsPage: FC< const organizationId = useOrganizationId() const { context } = useTemplateLayoutContext() const { template, permissions } = context - if (!template || !permissions) { - throw new Error( - "This page should not be displayed until template or permissions being loaded.", - ) - } const { template_rbac: isTemplateRBACEnabled } = useFeatureVisibility() const [state, send] = useMachine(templateACLMachine, { - context: { templateId: template.id }, + context: { templateId: template?.id }, }) const { templateACL, userToBeUpdated, groupToBeUpdated } = state.context + if (!template || !permissions) { + return + } return ( <> diff --git a/site/src/pages/TemplatePage/TemplateSummaryPage/TemplateSummaryPage.tsx b/site/src/pages/TemplatePage/TemplateSummaryPage/TemplateSummaryPage.tsx index 6a5718e613742..dbc8e7b820b25 100644 --- a/site/src/pages/TemplatePage/TemplateSummaryPage/TemplateSummaryPage.tsx +++ b/site/src/pages/TemplatePage/TemplateSummaryPage/TemplateSummaryPage.tsx @@ -3,6 +3,7 @@ import { FC } from "react" import { Helmet } from "react-helmet-async" import { pageTitle } from "util/page" import { TemplateSummaryPageView } from "./TemplateSummaryPageView" +import { Loader } from "components/Loader/Loader" export const TemplateSummaryPage: FC = () => { const { context } = useTemplateLayoutContext() @@ -16,9 +17,7 @@ export const TemplateSummaryPage: FC = () => { } = context if (!template || !activeTemplateVersion || !templateResources) { - throw new Error( - "This page should not be displayed until template, activeTemplateVersion or templateResources being loaded.", - ) + return } return (