Skip to content

Commit a364318

Browse files
authored
chore(UI): redirecting from workspace page if 404 (coder#6880)
1 parent 56f00a8 commit a364318

File tree

2 files changed

+48
-42
lines changed

2 files changed

+48
-42
lines changed

site/src/pages/WorkspacePage/WorkspacePage.tsx

Lines changed: 45 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { firstOrItem } from "util/array"
99
import { quotaMachine } from "xServices/quotas/quotasXService"
1010
import { workspaceMachine } from "xServices/workspace/workspaceXService"
1111
import { WorkspaceReadyPage } from "./WorkspaceReadyPage"
12+
import { RequirePermission } from "components/RequirePermission/RequirePermission"
1213

1314
export const WorkspacePage: FC = () => {
1415
const { username: usernameQueryParam, workspace: workspaceQueryParam } =
@@ -42,46 +43,50 @@ export const WorkspacePage: FC = () => {
4243
}, [username, quotaSend])
4344

4445
return (
45-
<ChooseOne>
46-
<Cond condition={workspaceState.matches("error")}>
47-
<div className={styles.error}>
48-
{Boolean(getWorkspaceError) && (
49-
<AlertBanner severity="error" error={getWorkspaceError} />
50-
)}
51-
{Boolean(getTemplateWarning) && (
52-
<AlertBanner severity="error" error={getTemplateWarning} />
53-
)}
54-
{Boolean(getTemplateParametersWarning) && (
55-
<AlertBanner
56-
severity="error"
57-
error={getTemplateParametersWarning}
58-
/>
59-
)}
60-
{Boolean(checkPermissionsError) && (
61-
<AlertBanner severity="error" error={checkPermissionsError} />
62-
)}
63-
{Boolean(getQuotaError) && (
64-
<AlertBanner severity="error" error={getQuotaError} />
65-
)}
66-
</div>
67-
</Cond>
68-
<Cond
69-
condition={
70-
Boolean(workspace) &&
71-
workspaceState.matches("ready") &&
72-
quotaState.matches("success")
73-
}
74-
>
75-
<WorkspaceReadyPage
76-
workspaceState={workspaceState}
77-
quotaState={quotaState}
78-
workspaceSend={workspaceSend}
79-
/>
80-
</Cond>
81-
<Cond>
82-
<Loader />
83-
</Cond>
84-
</ChooseOne>
46+
<RequirePermission
47+
isFeatureVisible={getWorkspaceError?.response?.status !== 404}
48+
>
49+
<ChooseOne>
50+
<Cond condition={workspaceState.matches("error")}>
51+
<div className={styles.error}>
52+
{Boolean(getWorkspaceError) && (
53+
<AlertBanner severity="error" error={getWorkspaceError} />
54+
)}
55+
{Boolean(getTemplateWarning) && (
56+
<AlertBanner severity="error" error={getTemplateWarning} />
57+
)}
58+
{Boolean(getTemplateParametersWarning) && (
59+
<AlertBanner
60+
severity="error"
61+
error={getTemplateParametersWarning}
62+
/>
63+
)}
64+
{Boolean(checkPermissionsError) && (
65+
<AlertBanner severity="error" error={checkPermissionsError} />
66+
)}
67+
{Boolean(getQuotaError) && (
68+
<AlertBanner severity="error" error={getQuotaError} />
69+
)}
70+
</div>
71+
</Cond>
72+
<Cond
73+
condition={
74+
Boolean(workspace) &&
75+
workspaceState.matches("ready") &&
76+
quotaState.matches("success")
77+
}
78+
>
79+
<WorkspaceReadyPage
80+
workspaceState={workspaceState}
81+
quotaState={quotaState}
82+
workspaceSend={workspaceSend}
83+
/>
84+
</Cond>
85+
<Cond>
86+
<Loader />
87+
</Cond>
88+
</ChooseOne>
89+
</RequirePermission>
8590
)
8691
}
8792

site/src/xServices/workspace/workspaceXService.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
displayError,
1010
displaySuccess,
1111
} from "../../components/GlobalSnackbar/utils"
12+
import { AxiosError } from "axios"
1213

1314
const latestBuild = (builds: TypesGen.WorkspaceBuild[]) => {
1415
// Cloning builds to not change the origin object with the sort()
@@ -56,7 +57,7 @@ export interface WorkspaceContext {
5657
workspace?: TypesGen.Workspace
5758
template?: TypesGen.Template
5859
build?: TypesGen.WorkspaceBuild
59-
getWorkspaceError?: Error | unknown
60+
getWorkspaceError?: AxiosError
6061
getTemplateWarning: Error | unknown
6162
getTemplateParametersWarning: Error | unknown
6263
// Builds
@@ -491,7 +492,7 @@ export const workspaceMachine = createMachine(
491492
workspace: (_, event) => event.data,
492493
}),
493494
assignGetWorkspaceError: assign({
494-
getWorkspaceError: (_, event) => event.data,
495+
getWorkspaceError: (_, event) => event.data as AxiosError,
495496
}),
496497
clearGetWorkspaceError: (context) =>
497498
assign({ ...context, getWorkspaceError: undefined }),

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy