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 ) {
@@ -66,7 +69,7 @@ export const DisplayStatusLanguage = {
66
69
67
70
export const getDisplayStatus = (
68
71
theme : Theme ,
69
- build : WorkspaceBuild ,
72
+ build : TypesGen . WorkspaceBuild ,
70
73
) : {
71
74
color : string
72
75
status : string
@@ -132,7 +135,7 @@ export const getDisplayStatus = (
132
135
throw new Error ( "unknown status " + status )
133
136
}
134
137
135
- export const getWorkspaceBuildDurationInSeconds = ( build : WorkspaceBuild ) : number | undefined => {
138
+ export const getWorkspaceBuildDurationInSeconds = ( build : TypesGen . WorkspaceBuild ) : number | undefined => {
136
139
const isCompleted = build . job . started_at && build . job . completed_at
137
140
138
141
if ( ! isCompleted ) {
@@ -144,7 +147,10 @@ export const getWorkspaceBuildDurationInSeconds = (build: WorkspaceBuild): numbe
144
147
return completedAt . diff ( startedAt , "seconds" )
145
148
}
146
149
147
- export const displayWorkspaceBuildDuration = ( build : WorkspaceBuild , inProgressLabel = "In progress" ) : string => {
150
+ export const displayWorkspaceBuildDuration = (
151
+ build : TypesGen . WorkspaceBuild ,
152
+ inProgressLabel = "In progress" ,
153
+ ) : string => {
148
154
const duration = getWorkspaceBuildDurationInSeconds ( build )
149
155
return duration ? `${ duration } seconds` : inProgressLabel
150
156
}
@@ -157,7 +163,7 @@ export const DisplayAgentStatusLanguage = {
157
163
158
164
export const getDisplayAgentStatus = (
159
165
theme : Theme ,
160
- agent : WorkspaceAgent ,
166
+ agent : TypesGen . WorkspaceAgent ,
161
167
) : {
162
168
color : string
163
169
status : string
@@ -186,8 +192,17 @@ export const getDisplayAgentStatus = (
186
192
}
187
193
}
188
194
189
- export const isWorkspaceOn = ( workspace : Workspace ) : boolean => {
195
+ export const isWorkspaceOn = ( workspace : TypesGen . Workspace ) : boolean => {
190
196
const transition = workspace . latest_build . transition
191
197
const status = workspace . latest_build . job . status
192
198
return transition === "start" && status === "succeeded"
193
199
}
200
+
201
+ export const defaultWorkspaceExtension = ( __startDate ?: dayjs . Dayjs ) : TypesGen . PutExtendWorkspaceRequest => {
202
+ const now = __startDate ? dayjs ( __startDate ) : dayjs ( )
203
+ const NinetyMinutesFromNow = now . add ( 90 , "minutes" ) . utc ( )
204
+
205
+ return {
206
+ deadline : NinetyMinutesFromNow . format ( ) ,
207
+ }
208
+ }
0 commit comments