7
7
ActiveTransition ,
8
8
WorkspaceBuildProgress ,
9
9
} from "components/WorkspaceBuildProgress/WorkspaceBuildProgress"
10
- import { FC } from "react"
10
+ import { FC , useEffect , useState } from "react"
11
11
import { useTranslation } from "react-i18next"
12
12
import { useNavigate } from "react-router-dom"
13
13
import * as TypesGen from "../../api/typesGenerated"
@@ -32,6 +32,7 @@ import { useLocalStorage } from "hooks"
32
32
import { ChooseOne , Cond } from "components/Conditionals/ChooseOne"
33
33
import AlertTitle from "@mui/material/AlertTitle"
34
34
import { Maybe } from "components/Conditionals/Maybe"
35
+ import dayjs from "dayjs"
35
36
36
37
export enum WorkspaceErrors {
37
38
GET_BUILDS_ERROR = "getBuildsError" ,
@@ -131,6 +132,31 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
131
132
if ( template !== undefined ) {
132
133
transitionStats = ActiveTransition ( template , workspace )
133
134
}
135
+
136
+ const [ showAlertPendingInQueue , setShowAlertPendingInQueue ] = useState ( false ) ;
137
+ const now = dayjs ( )
138
+ useEffect ( ( ) => {
139
+ if ( workspace . latest_build . status === "pending" &&
140
+ workspace . latest_build . job . queue_size > 0 &&
141
+ dayjs ( workspace . latest_build . created_at ) . isBefore ( now . subtract ( 5 , 'seconds' ) ) ) {
142
+ setShowAlertPendingInQueue ( true ) ;
143
+ return
144
+ }
145
+
146
+ if ( workspace . latest_build . status === "pending" &&
147
+ workspace . latest_build . job . queue_size > 0 ) {
148
+ const timer = setTimeout ( ( ) => {
149
+ if ( workspace . latest_build . status !== "pending" || workspace . latest_build . job . queue_size === 0 ) {
150
+ return
151
+ }
152
+ setShowAlertPendingInQueue ( true ) ;
153
+ } , 5000 )
154
+
155
+ return ( ) => {
156
+ clearTimeout ( timer ) ;
157
+ }
158
+ }
159
+ } , [ workspace , now ] )
134
160
return (
135
161
< >
136
162
< FullWidthPageHeader >
@@ -208,12 +234,7 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
208
234
209
235
< TemplateVersionWarnings warnings = { templateWarnings } />
210
236
211
- < Maybe
212
- condition = {
213
- workspace . latest_build . status === "pending" &&
214
- workspace . latest_build . job . queue_size > 0
215
- }
216
- >
237
+ < Maybe condition = { showAlertPendingInQueue } >
217
238
< Alert severity = "info" >
218
239
< AlertTitle > Workspace build is pending</ AlertTitle >
219
240
< AlertDetail >
0 commit comments