Skip to content

Commit 036301d

Browse files
committed
feat: delay build in queue banner
1 parent 4a9c8f4 commit 036301d

File tree

1 file changed

+28
-7
lines changed

1 file changed

+28
-7
lines changed

site/src/components/Workspace/Workspace.tsx

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
ActiveTransition,
88
WorkspaceBuildProgress,
99
} from "components/WorkspaceBuildProgress/WorkspaceBuildProgress"
10-
import { FC } from "react"
10+
import { FC, useEffect, useState } from "react"
1111
import { useTranslation } from "react-i18next"
1212
import { useNavigate } from "react-router-dom"
1313
import * as TypesGen from "../../api/typesGenerated"
@@ -32,6 +32,7 @@ import { useLocalStorage } from "hooks"
3232
import { ChooseOne, Cond } from "components/Conditionals/ChooseOne"
3333
import AlertTitle from "@mui/material/AlertTitle"
3434
import { Maybe } from "components/Conditionals/Maybe"
35+
import dayjs from "dayjs"
3536

3637
export enum WorkspaceErrors {
3738
GET_BUILDS_ERROR = "getBuildsError",
@@ -131,6 +132,31 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
131132
if (template !== undefined) {
132133
transitionStats = ActiveTransition(template, workspace)
133134
}
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])
134160
return (
135161
<>
136162
<FullWidthPageHeader>
@@ -208,12 +234,7 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
208234

209235
<TemplateVersionWarnings warnings={templateWarnings} />
210236

211-
<Maybe
212-
condition={
213-
workspace.latest_build.status === "pending" &&
214-
workspace.latest_build.job.queue_size > 0
215-
}
216-
>
237+
<Maybe condition={showAlertPendingInQueue}>
217238
<Alert severity="info">
218239
<AlertTitle>Workspace build is pending</AlertTitle>
219240
<AlertDetail>

0 commit comments

Comments
 (0)