Skip to content

Commit c28f1d8

Browse files
committed
refactor: remove workspace error enums
1 parent bd17290 commit c28f1d8

File tree

3 files changed

+35
-41
lines changed

3 files changed

+35
-41
lines changed

site/src/pages/WorkspacePage/Workspace.stories.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Meta, StoryObj } from "@storybook/react";
33
import { WatchAgentMetadataContext } from "components/Resources/AgentMetadata";
44
import { ProvisionerJobLog } from "api/typesGenerated";
55
import * as Mocks from "testHelpers/entities";
6-
import { Workspace, WorkspaceErrors } from "./Workspace";
6+
import { Workspace } from "./Workspace";
77
import { withReactContext } from "storybook-react-context";
88
import EventSource from "eventsourcemock";
99
import { ProxyContext, getPreferredProxy } from "contexts/ProxyContext";
@@ -133,7 +133,7 @@ export const Failed: Story = {
133133
...Running.args,
134134
workspace: Mocks.MockFailedWorkspace,
135135
workspaceErrors: {
136-
[WorkspaceErrors.BUILD_ERROR]: Mocks.mockApiError({
136+
buildError: Mocks.mockApiError({
137137
message: "A workspace build is already active.",
138138
}),
139139
},
@@ -224,7 +224,7 @@ export const GetBuildsError: Story = {
224224
args: {
225225
...Running.args,
226226
workspaceErrors: {
227-
[WorkspaceErrors.GET_BUILDS_ERROR]: Mocks.mockApiError({
227+
getBuildsError: Mocks.mockApiError({
228228
message: "There is a problem fetching builds.",
229229
}),
230230
},
@@ -235,7 +235,7 @@ export const CancellationError: Story = {
235235
args: {
236236
...Failed.args,
237237
workspaceErrors: {
238-
[WorkspaceErrors.CANCELLATION_ERROR]: Mocks.mockApiError({
238+
cancellationError: Mocks.mockApiError({
239239
message: "Job could not be canceled.",
240240
}),
241241
},

site/src/pages/WorkspacePage/Workspace.tsx

Lines changed: 27 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,13 @@ import { BuildsTable } from "./BuildsTable";
2929
import { WorkspaceDeletedBanner } from "./WorkspaceDeletedBanner";
3030
import { WorkspaceStats } from "./WorkspaceStats";
3131

32-
export enum WorkspaceErrors {
33-
GET_BUILDS_ERROR = "getBuildsError",
34-
BUILD_ERROR = "buildError",
35-
CANCELLATION_ERROR = "cancellationError",
36-
}
32+
export type WorkspaceError =
33+
| "getBuildsError"
34+
| "buildError"
35+
| "cancellationError";
36+
37+
export type WorkspaceErrors = Partial<Record<WorkspaceError, unknown>>;
38+
3739
export interface WorkspaceProps {
3840
scheduleProps: {
3941
onDeadlinePlus: (hours: number) => void;
@@ -60,7 +62,7 @@ export interface WorkspaceProps {
6062
canChangeVersions: boolean;
6163
hideSSHButton?: boolean;
6264
hideVSCodeDesktopButton?: boolean;
63-
workspaceErrors: Partial<Record<WorkspaceErrors, unknown>>;
65+
workspaceErrors: WorkspaceErrors;
6466
buildInfo?: TypesGen.BuildInfoResponse;
6567
sshPrefix?: string;
6668
template?: TypesGen.Template;
@@ -114,28 +116,12 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
114116
const serverVersion = buildInfo?.version || "";
115117
const { saveLocal, getLocal } = useLocalStorage();
116118

117-
const buildError = Boolean(workspaceErrors[WorkspaceErrors.BUILD_ERROR]) && (
118-
<ErrorAlert
119-
error={workspaceErrors[WorkspaceErrors.BUILD_ERROR]}
120-
dismissible
121-
/>
122-
);
123-
124-
const cancellationError = Boolean(
125-
workspaceErrors[WorkspaceErrors.CANCELLATION_ERROR],
126-
) && (
127-
<ErrorAlert
128-
error={workspaceErrors[WorkspaceErrors.CANCELLATION_ERROR]}
129-
dismissible
130-
/>
131-
);
132-
133-
let transitionStats: TypesGen.TransitionStats | undefined = undefined;
134-
if (template !== undefined) {
135-
transitionStats = ActiveTransition(template, workspace);
136-
}
137-
138119
const [showAlertPendingInQueue, setShowAlertPendingInQueue] = useState(false);
120+
121+
// 2023-11-15 - MES - This effect will be called every single render because
122+
// "now" will always change and invalidate the dependency array. Need to
123+
// figure out if this effect really should run every render (possibly meaning
124+
// no dependency array at all), or how to get the array stabilized (ideal)
139125
const now = dayjs();
140126
useEffect(() => {
141127
if (
@@ -174,6 +160,9 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
174160
const autoStartFailing = workspace.autostart_schedule && !canAutostart;
175161
const requiresManualUpdate = updateRequired && autoStartFailing;
176162

163+
const transitionStats =
164+
template !== undefined ? ActiveTransition(template, workspace) : undefined;
165+
177166
return (
178167
<>
179168
<FullWidthPageHeader>
@@ -244,8 +233,15 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
244233
{updateMessage && <AlertDetail>{updateMessage}</AlertDetail>}
245234
</Alert>
246235
))}
247-
{buildError}
248-
{cancellationError}
236+
237+
{Boolean(workspaceErrors.buildError) && (
238+
<ErrorAlert error={workspaceErrors.buildError} dismissible />
239+
)}
240+
241+
{Boolean(workspaceErrors.cancellationError) && (
242+
<ErrorAlert error={workspaceErrors.cancellationError} dismissible />
243+
)}
244+
249245
{workspace.latest_build.status === "running" &&
250246
!workspace.health.healthy && (
251247
<Alert
@@ -357,10 +353,8 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
357353
/>
358354
)}
359355

360-
{workspaceErrors[WorkspaceErrors.GET_BUILDS_ERROR] ? (
361-
<ErrorAlert
362-
error={workspaceErrors[WorkspaceErrors.GET_BUILDS_ERROR]}
363-
/>
356+
{workspaceErrors.getBuildsError ? (
357+
<ErrorAlert error={workspaceErrors.getBuildsError} />
364358
) : (
365359
<BuildsTable
366360
builds={builds}

site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
getMaxDeadlineChange,
1010
getMinDeadline,
1111
} from "utils/schedule";
12-
import { Workspace, WorkspaceErrors } from "./Workspace";
12+
import { Workspace } from "./Workspace";
1313
import { pageTitle } from "utils/page";
1414
import { hasJobError } from "utils/workspace";
1515
import { UpdateBuildParametersDialog } from "./UpdateBuildParametersDialog";
@@ -278,14 +278,14 @@ export const WorkspaceReadyPage = ({
278278
hideSSHButton={featureVisibility["browser_only"]}
279279
hideVSCodeDesktopButton={featureVisibility["browser_only"]}
280280
workspaceErrors={{
281-
[WorkspaceErrors.GET_BUILDS_ERROR]: buildsError,
282-
[WorkspaceErrors.BUILD_ERROR]:
281+
getBuildsError: buildsError,
282+
buildError:
283283
restartBuildError ??
284284
startWorkspaceMutation.error ??
285285
stopWorkspaceMutation.error ??
286286
deleteWorkspaceMutation.error ??
287287
updateWorkspaceMutation.error,
288-
[WorkspaceErrors.CANCELLATION_ERROR]: cancelBuildMutation.error,
288+
cancellationError: cancelBuildMutation.error,
289289
}}
290290
buildInfo={buildInfo}
291291
sshPrefix={sshPrefixQuery.data?.hostname_prefix}

0 commit comments

Comments
 (0)