Skip to content

Commit dd2dd95

Browse files
committed
feat: pie chart for Job Monitor
1 parent 04db32b commit dd2dd95

44 files changed

Lines changed: 3638 additions & 1081 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

package-lock.json

Lines changed: 1469 additions & 757 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/diracx-web-components/.storybook/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ const config: StorybookConfig = {
4343
"../stories/mocks/metadata.mock.tsx",
4444
),
4545
"./jobDataService": require.resolve(
46-
"../stories/mocks/jobDataService.mock.ts",
46+
"../stories/mocks/jobDataService.mock.tsx",
4747
),
4848
};
4949
return config;

packages/diracx-web-components/.storybook/preview.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import type { Preview } from "@storybook/react";
2-
import React from "react";
32
import { CssBaseline } from "@mui/material";
43
import { ThemeProvider } from "../src/contexts/ThemeProvider";
54

packages/diracx-web-components/babel.config.cjs renamed to packages/diracx-web-components/babel.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
module.exports = {
1+
export default {
22
presets: [
33
"@babel/preset-env",
44
["@babel/preset-react", { runtime: "automatic" }],

packages/diracx-web-components/jest.config.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,20 @@ const config = {
1313
moduleNameMapper: {
1414
"^@axa-fr/react-oidc$": "<rootDir>/stories/mocks/react-oidc.mock.tsx",
1515
"^../../hooks/metadata$": "<rootDir>/stories/mocks/metadata.mock.tsx",
16-
"^./jobDataService$": "<rootDir>/stories/mocks/jobDataService.mock.ts",
16+
"^./jobDataService$": "<rootDir>/stories/mocks/jobDataService.mock.tsx",
17+
"\\.css$": "<rootDir>/stories/mocks/style.mock.ts",
18+
},
19+
20+
// To support ESM modules in Jest
21+
transformIgnorePatterns: [
22+
"/node_modules/(?!d3|d3-[^/]+|internmap|delaunator|robust-predicates)",
23+
],
24+
25+
// Tell Jest how to transform files
26+
// Use ts-jest for TypeScript files and babel-jest for JavaScript files
27+
transform: {
28+
"^.+\\.(ts|tsx)$": "ts-jest",
29+
"^.+\\.(js|jsx)$": "babel-jest",
1730
},
1831
};
1932

packages/diracx-web-components/package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,21 @@
3131
"@mui/utils": "^6.1.6",
3232
"@mui/x-date-pickers": "^7.28.3",
3333
"@tanstack/react-table": "^8.20.5",
34+
"@types/d3": "^7.4.3",
3435
"@types/node": "^20.17.6",
3536
"@types/react": "^18.3.12",
3637
"@types/react-dom": "^18.3.1",
38+
"d3": "^7.9.0",
39+
"d3-hierarchy": "^3.1.2",
3740
"dayjs": "^1.11.13",
3841
"react": "^18.3.1",
3942
"react-dom": "^18.3.1",
4043
"react-virtuoso": "^4.12.3",
4144
"swr": "^2.2.5"
4245
},
4346
"devDependencies": {
44-
"@babel/preset-env": "^7.26.9",
47+
"@babel/core": "^7.28.0",
48+
"@babel/preset-env": "^7.28.0",
4549
"@babel/preset-react": "^7.24.7",
4650
"@babel/preset-typescript": "^7.24.7",
4751
"@chromatic-com/storybook": "^3.2.4",

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

Lines changed: 22 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import {
3232
deleteJobs,
3333
getJobHistory,
3434
killJobs,
35-
refreshJobs,
3635
rescheduleJobs,
3736
useJobs,
3837
} from "./jobDataService";
@@ -107,21 +106,22 @@ export function JobDataTable({
107106
// State for job history
108107
const [isHistoryDialogOpen, setIsHistoryDialogOpen] = useState(false);
109108
const [jobHistoryData, setJobHistoryData] = useState<JobHistory[]>([]);
110-
111109
/**
112110
* Fetches the jobs from the /api/jobs/search endpoint
113111
*/
114-
const { data, error, isLoading, isValidating } = useJobs(
112+
const {
113+
data: results,
114+
headers: dataHeader,
115+
error: dataError,
116+
isLoading,
117+
} = useJobs(
115118
diracxUrl,
116119
accessToken,
117120
searchBody,
118121
pagination.pageIndex,
119122
pagination.pageSize,
120123
);
121124

122-
const dataHeader = data?.headers;
123-
const results = useMemo(() => data?.data || [], [data?.data]);
124-
125125
// Parse the headers to get the first item, last item and number of items
126126
const contentRange = dataHeader?.get("content-range");
127127
let totalJobs = 0;
@@ -146,13 +146,10 @@ export function JobDataTable({
146146
const selectedIds = Object.keys(rowSelection).map(Number);
147147
await deleteJobs(diracxUrl, selectedIds, accessToken);
148148
setBackdropOpen(false);
149-
refreshJobs(
150-
diracxUrl,
151-
accessToken,
152-
searchBody,
153-
pagination.pageIndex,
154-
pagination.pageSize,
155-
);
149+
// Refresh the data manually
150+
setSearchBody((prev) => {
151+
return { ...prev };
152+
});
156153
clearSelected();
157154
setSnackbarInfo({
158155
open: true,
@@ -199,13 +196,12 @@ export function JobDataTable({
199196
);
200197

201198
setBackdropOpen(false);
202-
refreshJobs(
203-
diracxUrl,
204-
accessToken,
205-
searchBody,
206-
pagination.pageIndex,
207-
pagination.pageSize,
208-
);
199+
200+
// Refresh the data manually
201+
setSearchBody((prev) => {
202+
return { ...prev };
203+
});
204+
209205
clearSelected();
210206
// Handle Snackbar Messaging
211207
if (successfulJobs.length > 0 && failedJobs.length > 0) {
@@ -271,13 +267,10 @@ export function JobDataTable({
271267
);
272268

273269
setBackdropOpen(false);
274-
refreshJobs(
275-
diracxUrl,
276-
accessToken,
277-
searchBody,
278-
pagination.pageIndex,
279-
pagination.pageSize,
280-
);
270+
// Refresh the data manually
271+
setSearchBody((prev) => {
272+
return { ...prev };
273+
});
281274
clearSelected();
282275
// Handle Snackbar Messaging
283276
if (successfulJobs.length > 0 && failedJobs.length > 0) {
@@ -405,7 +398,7 @@ export function JobDataTable({
405398
* Table instance
406399
*/
407400
const table = useReactTable({
408-
data: results,
401+
data: results || [],
409402
columns,
410403
state: {
411404
columnVisibility,
@@ -443,9 +436,8 @@ export function JobDataTable({
443436
totalRows={totalJobs}
444437
searchBody={searchBody}
445438
setSearchBody={setSearchBody}
446-
error={error}
439+
error={dataError}
447440
isLoading={isLoading}
448-
isValidating={isValidating}
449441
toolbarComponents={toolbarComponents}
450442
menuItems={menuItems}
451443
/>

0 commit comments

Comments
 (0)