1
1
import TextField from "@mui/material/TextField"
2
- import { Template , UpdateTemplateMeta } from "api/typesGenerated"
2
+ import {
3
+ Template ,
4
+ UpdateTemplateMeta ,
5
+ WorkspaceStatus ,
6
+ Workspace ,
7
+ } from "api/typesGenerated"
3
8
import { FormikTouched , useFormik } from "formik"
4
9
import { FC , ChangeEvent , useState } from "react"
5
10
import { getFormHelpers } from "utils/formUtils"
@@ -20,7 +25,9 @@ import Checkbox from "@mui/material/Checkbox"
20
25
import FormControlLabel from "@mui/material/FormControlLabel"
21
26
import Switch from "@mui/material/Switch"
22
27
import { ConfirmDialog } from "components/Dialogs/ConfirmDialog/ConfirmDialog"
23
- import { useWorkspacesData } from "pages/WorkspacesPage/data"
28
+ import { useQuery } from "@tanstack/react-query"
29
+ import { getWorkspaces } from "api/api"
30
+ import { compareAsc , add , endOfToday } from "date-fns"
24
31
25
32
const TTLHelperText = ( {
26
33
ttl,
@@ -147,7 +154,11 @@ export const TemplateScheduleForm: FC<TemplateScheduleForm> = ({
147
154
} ,
148
155
validationSchema,
149
156
onSubmit : ( formData ) => {
150
- if ( form . values . inactivity_cleanup_enabled ) {
157
+ if (
158
+ form . values . inactivity_cleanup_enabled &&
159
+ workspacesToBeDeletedToday &&
160
+ workspacesToBeDeletedToday . length > 0
161
+ ) {
151
162
setIsInactivityDialogOpen ( true )
152
163
} else {
153
164
submitValues ( formData )
@@ -185,14 +196,35 @@ export const TemplateScheduleForm: FC<TemplateScheduleForm> = ({
185
196
} )
186
197
}
187
198
188
- const { data : workspacesData , error : getWorkspacesError } = useWorkspacesData (
189
- {
190
- query : "deleting_by:2023-05-12" ,
199
+ const { data : workspacesData } = useQuery ( {
200
+ queryKey : [ "workspaces" ] ,
201
+ queryFn : ( ) => getWorkspaces ( { } ) ,
202
+ enabled : form . values . inactivity_cleanup_enabled ,
203
+ } )
204
+
205
+ const inactiveStatuses : WorkspaceStatus [ ] = [
206
+ "stopped" ,
207
+ "canceled" ,
208
+ "failed" ,
209
+ "deleted" ,
210
+ ]
211
+
212
+ const workspacesToBeDeletedToday = workspacesData ?. workspaces ?. filter (
213
+ ( workspace : Workspace ) => {
214
+ const isInactive = inactiveStatuses . includes (
215
+ workspace . latest_build . status ,
216
+ )
217
+
218
+ const proposedDeletion = add ( new Date ( workspace . last_used_at ) , {
219
+ days : form . values . inactivity_ttl_ms ,
220
+ } )
221
+
222
+ if ( isInactive && compareAsc ( proposedDeletion , endOfToday ( ) ) < 1 ) {
223
+ return workspace
224
+ }
191
225
} ,
192
226
)
193
227
194
- console . log ( "workspacesData" , workspacesData )
195
-
196
228
const handleToggleFailureCleanup = async ( e : ChangeEvent ) => {
197
229
form . handleChange ( e )
198
230
if ( ! form . values . failure_cleanup_enabled ) {
@@ -413,11 +445,16 @@ export const TemplateScheduleForm: FC<TemplateScheduleForm> = ({
413
445
< ConfirmDialog
414
446
type = "delete"
415
447
open = { isInactivityDialogOpen }
416
- onConfirm = { ( ) => submitValues ( form . values ) }
448
+ onConfirm = { ( ) => {
449
+ submitValues ( form . values )
450
+ setIsInactivityDialogOpen ( false )
451
+ } }
417
452
onClose = { ( ) => setIsInactivityDialogOpen ( false ) }
418
453
title = "Delete inactive workspaces"
419
454
confirmText = "Delete Workspaces"
420
- description = "There are workspaces that already match this filter and will be deleted upon form submission. Are you sure you want to proceed?"
455
+ description = { `There are ${
456
+ workspacesToBeDeletedToday ?. length ?? ""
457
+ } workspaces that already match this filter and will be deleted upon form submission. Are you sure you want to proceed?`}
421
458
/>
422
459
</ HorizontalForm >
423
460
)
0 commit comments