Skip to content

Commit e48b3cc

Browse files
committed
filtering on workspaces to be deleted
1 parent 95e43ac commit e48b3cc

File tree

2 files changed

+50
-13
lines changed

2 files changed

+50
-13
lines changed

site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleForm.tsx

Lines changed: 47 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
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"
38
import { FormikTouched, useFormik } from "formik"
49
import { FC, ChangeEvent, useState } from "react"
510
import { getFormHelpers } from "utils/formUtils"
@@ -20,7 +25,9 @@ import Checkbox from "@mui/material/Checkbox"
2025
import FormControlLabel from "@mui/material/FormControlLabel"
2126
import Switch from "@mui/material/Switch"
2227
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"
2431

2532
const TTLHelperText = ({
2633
ttl,
@@ -147,7 +154,11 @@ export const TemplateScheduleForm: FC<TemplateScheduleForm> = ({
147154
},
148155
validationSchema,
149156
onSubmit: (formData) => {
150-
if (form.values.inactivity_cleanup_enabled) {
157+
if (
158+
form.values.inactivity_cleanup_enabled &&
159+
workspacesToBeDeletedToday &&
160+
workspacesToBeDeletedToday.length > 0
161+
) {
151162
setIsInactivityDialogOpen(true)
152163
} else {
153164
submitValues(formData)
@@ -185,14 +196,35 @@ export const TemplateScheduleForm: FC<TemplateScheduleForm> = ({
185196
})
186197
}
187198

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+
}
191225
},
192226
)
193227

194-
console.log("workspacesData", workspacesData)
195-
196228
const handleToggleFailureCleanup = async (e: ChangeEvent) => {
197229
form.handleChange(e)
198230
if (!form.values.failure_cleanup_enabled) {
@@ -413,11 +445,16 @@ export const TemplateScheduleForm: FC<TemplateScheduleForm> = ({
413445
<ConfirmDialog
414446
type="delete"
415447
open={isInactivityDialogOpen}
416-
onConfirm={() => submitValues(form.values)}
448+
onConfirm={() => {
449+
submitValues(form.values)
450+
setIsInactivityDialogOpen(false)
451+
}}
417452
onClose={() => setIsInactivityDialogOpen(false)}
418453
title="Delete inactive workspaces"
419454
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?`}
421458
/>
422459
</HorizontalForm>
423460
)

site/src/pages/WorkspacesPage/data.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import { useState } from "react"
1616
import { useTranslation } from "react-i18next"
1717

1818
type UseWorkspacesDataParams = {
19-
page?: number
20-
limit?: number
19+
page: number
20+
limit: number
2121
query: string
2222
}
2323

@@ -34,7 +34,7 @@ export const useWorkspacesData = ({
3434
getWorkspaces({
3535
q: query,
3636
limit: limit,
37-
offset: page && limit && (page <= 0 ? 0 : (page - 1) * limit),
37+
offset: page <= 0 ? 0 : (page - 1) * limit,
3838
}),
3939
onSuccess: () => {
4040
setShouldRefetch(true)

0 commit comments

Comments
 (0)