Skip to content

Commit 7a42941

Browse files
committed
fix: use the new API and fix the job monitor
1 parent dc15f6c commit 7a42941

4 files changed

Lines changed: 34 additions & 31 deletions

File tree

packages/diracx-web-components/src/components/JobMonitor/JobDataTable.tsx

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -201,9 +201,7 @@ export function JobDataTable({
201201
const failedJobs = Object.entries(data.failed).map(
202202
([jobId, error]) => `Job ${jobId}: ${error.detail}`,
203203
);
204-
const successfulJobs = Object.keys(data.success).map(
205-
(jobId) => `Job ${jobId}`,
206-
);
204+
const areSucceedJobs = Object.keys(data.success).length > 0;
207205

208206
setBackdropOpen(false);
209207
refreshJobs(
@@ -215,22 +213,22 @@ export function JobDataTable({
215213
);
216214
clearSelected();
217215
// Handle Snackbar Messaging
218-
if (successfulJobs.length > 0 && failedJobs.length > 0) {
216+
if (areSucceedJobs && failedJobs.length > 0) {
219217
setSnackbarInfo({
220218
open: true,
221-
message: `Kill operation summary. Success: ${successfulJobs.join(", ")}. Failed: ${failedJobs.join("; ")}`,
219+
message: `Kill operation summary. Failed: ${failedJobs.join("; ")}, Success for the rest`,
222220
severity: "warning",
223221
});
224-
} else if (successfulJobs.length > 0) {
222+
} else if (areSucceedJobs) {
225223
setSnackbarInfo({
226224
open: true,
227-
message: `Kill operation summary. Success: ${successfulJobs.join(", ")}`,
225+
message: `Kill operation summary. Success for all selected jobs.`,
228226
severity: "success",
229227
});
230228
} else {
231229
setSnackbarInfo({
232230
open: true,
233-
message: `Kill operation summary. Failed: ${failedJobs.join("; ")}`,
231+
message: `Kill operation summary. Failure for all selected jobs.`,
234232
severity: "error",
235233
});
236234
}
@@ -273,9 +271,7 @@ export function JobDataTable({
273271
const failedJobs = Object.entries(data.failed).map(
274272
([jobId, error]) => `Job ${jobId}: ${error.detail}`,
275273
);
276-
const successfulJobs = Object.keys(data.success).map(
277-
(jobId) => `Job ${jobId}`,
278-
);
274+
const areSucceedJobs = Object.keys(data.success).length > 0;
279275

280276
setBackdropOpen(false);
281277
refreshJobs(
@@ -287,22 +283,22 @@ export function JobDataTable({
287283
);
288284
clearSelected();
289285
// Handle Snackbar Messaging
290-
if (successfulJobs.length > 0 && failedJobs.length > 0) {
286+
if (areSucceedJobs && failedJobs.length > 0) {
291287
setSnackbarInfo({
292288
open: true,
293-
message: `Reschedule operation summary. Success: ${successfulJobs.join(", ")}. Failed: ${failedJobs.join("; ")}`,
289+
message: `Reschedule operation summary. Failed: ${failedJobs.join("; ")}, Success for the rest`,
294290
severity: "warning",
295291
});
296-
} else if (successfulJobs.length > 0) {
292+
} else if (areSucceedJobs) {
297293
setSnackbarInfo({
298294
open: true,
299-
message: `Reschedule operation summary. Success: ${successfulJobs.join(", ")}`,
295+
message: `Reschedule operation summary. Success for all selected jobs.`,
300296
severity: "success",
301297
});
302298
} else {
303299
setSnackbarInfo({
304300
open: true,
305-
message: `Reschedule operation summary. Failed: ${failedJobs.join("; ")}`,
301+
message: `Reschedule operation summary. Failure for all selected jobs.`,
306302
severity: "error",
307303
});
308304
}

packages/diracx-web-components/src/components/JobMonitor/jobDataService.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,7 @@ export function deleteJobs(
119119

120120
const deleteUrl = `${diracxUrl}/api/jobs/status`;
121121

122-
const currentDate = dayjs()
123-
.utc()
124-
.format("YYYY-MM-DDTHH:mm:ss.SSSSSS[Z]")
125-
.toString();
122+
const currentDate = dayjs().toISOString();
126123

127124
const body = selectedIds.reduce((acc: StatusBody, jobId) => {
128125
acc[jobId] = {
@@ -209,9 +206,12 @@ export function rescheduleJobs(
209206
if (!diracxUrl) {
210207
throw new Error("Invalid URL generated for rescheduling jobs.");
211208
}
212-
const queryString = selectedIds.map((id) => `job_ids=${id}`).join("&");
213-
const rescheduleUrl = `${diracxUrl}/api/jobs/reschedule?${queryString}`;
214-
return fetcher([rescheduleUrl, accessToken, "POST"]);
209+
const body = {
210+
job_ids: selectedIds,
211+
};
212+
213+
const rescheduleUrl = `${diracxUrl}/api/jobs/reschedule`;
214+
return fetcher([rescheduleUrl, accessToken, "POST", body]);
215215
}
216216

217217
/**

packages/diracx-web-components/src/components/shared/DataTable.tsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ function DataTableToolbar<T extends Record<string, unknown>>({
131131
)}
132132
{numSelected > 0 ? (
133133
<Stack direction="row">
134-
<Tooltip title="Get IDs">
134+
<Tooltip title={`Get ID${numSelected > 1 ? "s" : ""}`}>
135135
<IconButton onClick={handleCopyIDs}>
136136
<FormatListBulleted />
137137
</IconButton>
@@ -212,7 +212,7 @@ export interface DataTableProps<T extends Record<string, unknown>> {
212212
totalRows: number;
213213
/** The search body to send along with the request */
214214
searchBody: SearchBody;
215-
/** The function to call when the search body changes */
215+
/** Function to set the search body */
216216
setSearchBody: React.Dispatch<React.SetStateAction<SearchBody>>;
217217
/** The error message */
218218
error: string | null;
@@ -394,8 +394,10 @@ export function DataTable<T extends Record<string, unknown>>({
394394
<DataTableToolbar
395395
title={title}
396396
table={table}
397-
numSelected={Object.keys(table.getState().rowSelection).length}
398-
selectedIds={Object.keys(table.getState().rowSelection).map(Number)}
397+
numSelected={table.getSelectedRowModel().rows.length}
398+
selectedIds={table
399+
.getSelectedRowModel()
400+
.rows.map((row) => Number(row.id))}
399401
toolbarComponents={toolbarComponents}
400402
/>
401403
<TableVirtuoso
@@ -422,8 +424,9 @@ export function DataTable<T extends Record<string, unknown>>({
422424
>
423425
<Checkbox
424426
indeterminate={
425-
table.getIsSomeRowsSelected() &&
426-
!table.getIsAllRowsSelected()
427+
table.getSelectedRowModel().rows.length > 0 &&
428+
table.getSelectedRowModel().rows.length <
429+
table.getState().pagination.pageSize
427430
}
428431
checked={table.getIsAllRowsSelected()}
429432
onChange={table.getToggleAllRowsSelectedHandler()}

packages/diracx-web-components/src/hooks/utils.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,14 @@ export async function fetcher<T>(
4040
throw new Error(errorMessage);
4141
}
4242

43+
if (response.status === 204) {
44+
// No content response, return empty data
45+
return { headers: response.headers, data: {} as T };
46+
}
47+
4348
const data = (await response.json()) as T;
44-
const responseHeaders = response.headers;
4549

46-
return { headers: responseHeaders, data };
50+
return { headers: response.headers, data };
4751
}
4852

4953
/**

0 commit comments

Comments
 (0)