1
1
import { Theme } from "@material-ui/core/styles"
2
2
import dayjs from "dayjs"
3
+ import utc from "dayjs/plugin/utc"
3
4
import { WorkspaceBuildTransition } from "../api/types"
4
- import { Workspace , WorkspaceAgent , WorkspaceBuild } from "../api/typesGenerated"
5
+ import * as TypesGen from "../api/typesGenerated"
6
+
7
+ dayjs . extend ( utc )
5
8
6
9
export type WorkspaceStatus =
7
10
| "queued"
@@ -29,7 +32,7 @@ const succeededToStatus: Record<WorkspaceBuildTransition, WorkspaceStatus> = {
29
32
}
30
33
31
34
// Converts a workspaces status to a human-readable form.
32
- export const getWorkspaceStatus = ( workspaceBuild ?: WorkspaceBuild ) : WorkspaceStatus => {
35
+ export const getWorkspaceStatus = ( workspaceBuild ?: TypesGen . WorkspaceBuild ) : WorkspaceStatus => {
33
36
const transition = workspaceBuild ?. transition as WorkspaceBuildTransition
34
37
const jobStatus = workspaceBuild ?. job . status
35
38
switch ( jobStatus ) {
@@ -67,7 +70,7 @@ export const DisplayStatusLanguage = {
67
70
// Localize workspace status and provide corresponding color from theme
68
71
export const getDisplayStatus = (
69
72
theme : Theme ,
70
- build : WorkspaceBuild ,
73
+ build : TypesGen . WorkspaceBuild ,
71
74
) : {
72
75
color : string
73
76
status : string
@@ -133,7 +136,7 @@ export const getDisplayStatus = (
133
136
throw new Error ( "unknown status " + status )
134
137
}
135
138
136
- export const getWorkspaceBuildDurationInSeconds = ( build : WorkspaceBuild ) : number | undefined => {
139
+ export const getWorkspaceBuildDurationInSeconds = ( build : TypesGen . WorkspaceBuild ) : number | undefined => {
137
140
const isCompleted = build . job . started_at && build . job . completed_at
138
141
139
142
if ( ! isCompleted ) {
@@ -145,7 +148,10 @@ export const getWorkspaceBuildDurationInSeconds = (build: WorkspaceBuild): numbe
145
148
return completedAt . diff ( startedAt , "seconds" )
146
149
}
147
150
148
- export const displayWorkspaceBuildDuration = ( build : WorkspaceBuild , inProgressLabel = "In progress" ) : string => {
151
+ export const displayWorkspaceBuildDuration = (
152
+ build : TypesGen . WorkspaceBuild ,
153
+ inProgressLabel = "In progress" ,
154
+ ) : string => {
149
155
const duration = getWorkspaceBuildDurationInSeconds ( build )
150
156
return duration ? `${ duration } seconds` : inProgressLabel
151
157
}
@@ -158,7 +164,7 @@ export const DisplayAgentStatusLanguage = {
158
164
159
165
export const getDisplayAgentStatus = (
160
166
theme : Theme ,
161
- agent : WorkspaceAgent ,
167
+ agent : TypesGen . WorkspaceAgent ,
162
168
) : {
163
169
color : string
164
170
status : string
@@ -187,8 +193,17 @@ export const getDisplayAgentStatus = (
187
193
}
188
194
}
189
195
190
- export const isWorkspaceOn = ( workspace : Workspace ) : boolean => {
196
+ export const isWorkspaceOn = ( workspace : TypesGen . Workspace ) : boolean => {
191
197
const transition = workspace . latest_build . transition
192
198
const status = workspace . latest_build . job . status
193
199
return transition === "start" && status === "succeeded"
194
200
}
201
+
202
+ export const defaultWorkspaceExtension = ( __startDate ?: dayjs . Dayjs ) : TypesGen . PutExtendWorkspaceRequest => {
203
+ const now = __startDate ? dayjs ( __startDate ) : dayjs ( )
204
+ const NinetyMinutesFromNow = now . add ( 90 , "minutes" ) . utc ( )
205
+
206
+ return {
207
+ deadline : NinetyMinutesFromNow . format ( ) ,
208
+ }
209
+ }
0 commit comments