@@ -29,11 +29,13 @@ import { BuildsTable } from "./BuildsTable";
29
29
import { WorkspaceDeletedBanner } from "./WorkspaceDeletedBanner" ;
30
30
import { WorkspaceStats } from "./WorkspaceStats" ;
31
31
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
+
37
39
export interface WorkspaceProps {
38
40
scheduleProps : {
39
41
onDeadlinePlus : ( hours : number ) => void ;
@@ -60,7 +62,7 @@ export interface WorkspaceProps {
60
62
canChangeVersions : boolean ;
61
63
hideSSHButton ?: boolean ;
62
64
hideVSCodeDesktopButton ?: boolean ;
63
- workspaceErrors : Partial < Record < WorkspaceErrors , unknown > > ;
65
+ workspaceErrors : WorkspaceErrors ;
64
66
buildInfo ?: TypesGen . BuildInfoResponse ;
65
67
sshPrefix ?: string ;
66
68
template ?: TypesGen . Template ;
@@ -114,28 +116,12 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
114
116
const serverVersion = buildInfo ?. version || "" ;
115
117
const { saveLocal, getLocal } = useLocalStorage ( ) ;
116
118
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
-
138
119
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)
139
125
const now = dayjs ( ) ;
140
126
useEffect ( ( ) => {
141
127
if (
@@ -174,6 +160,9 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
174
160
const autoStartFailing = workspace . autostart_schedule && ! canAutostart ;
175
161
const requiresManualUpdate = updateRequired && autoStartFailing ;
176
162
163
+ const transitionStats =
164
+ template !== undefined ? ActiveTransition ( template , workspace ) : undefined ;
165
+
177
166
return (
178
167
< >
179
168
< FullWidthPageHeader >
@@ -244,8 +233,15 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
244
233
{ updateMessage && < AlertDetail > { updateMessage } </ AlertDetail > }
245
234
</ Alert >
246
235
) ) }
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
+
249
245
{ workspace . latest_build . status === "running" &&
250
246
! workspace . health . healthy && (
251
247
< Alert
@@ -357,10 +353,8 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
357
353
/>
358
354
) }
359
355
360
- { workspaceErrors [ WorkspaceErrors . GET_BUILDS_ERROR ] ? (
361
- < ErrorAlert
362
- error = { workspaceErrors [ WorkspaceErrors . GET_BUILDS_ERROR ] }
363
- />
356
+ { workspaceErrors . getBuildsError ? (
357
+ < ErrorAlert error = { workspaceErrors . getBuildsError } />
364
358
) : (
365
359
< BuildsTable
366
360
builds = { builds }
0 commit comments