From c45d43d5bc5e583d6dd2267a3c6028887130b2e9 Mon Sep 17 00:00:00 2001 From: "EREBUS_DMN\\jsz" <johanna.szepanski@softhouse.se> Date: Tue, 3 Dec 2024 12:08:29 +0100 Subject: [PATCH] pulled everything related to job section into it's own component --- src/components/IOC/IOCManage/IOCManage.jsx | 28 +++----------- src/components/IOC/IOCManage/JobSection.tsx | 43 +++++++++++++++++++++ src/components/Job/JobTable/JobTable.jsx | 2 +- src/views/IOC/IOCDetailsView.jsx | 43 +-------------------- 4 files changed, 52 insertions(+), 64 deletions(-) create mode 100644 src/components/IOC/IOCManage/JobSection.tsx diff --git a/src/components/IOC/IOCManage/IOCManage.jsx b/src/components/IOC/IOCManage/IOCManage.jsx index d4e64791..446f3a04 100644 --- a/src/components/IOC/IOCManage/IOCManage.jsx +++ b/src/components/IOC/IOCManage/IOCManage.jsx @@ -1,4 +1,4 @@ -import { Button, Stack, Tooltip, Typography } from "@mui/material"; +import { Button, Stack, Tooltip } from "@mui/material"; import { useState, useEffect, useContext, useCallback, useMemo } from "react"; import { userContext, @@ -6,13 +6,13 @@ import { ExternalLink, InternalLink } from "@ess-ics/ce-ui-common"; +import { JobSection } from "./JobSection"; import { IOCDetails } from "../IOCDetails"; import { DeployIOC } from "../DeployIOC"; import { UndeployIOC } from "../UndeployIOC"; import { AccessControl } from "../../auth/AccessControl"; import { DeploymentStatus } from "../../../api/DataTypes"; import { IOCService } from "../IOCService"; -import { JobTable } from "../../Job"; import { apiContext } from "../../../api/DeployApi"; import env from "../../../config/env"; @@ -21,12 +21,9 @@ export function IOCManage({ getIOC, buttonDisabled, currentCommand, - jobs, - jobsLoading, getJobs, setButtonDisabled, - pagination, - onPage + pagination }) { const { user } = useContext(userContext); const client = useContext(apiContext); @@ -176,7 +173,7 @@ export function IOCManage({ onClick={() => { setDeployDialogOpen(true); }} - disabled={buttonDisabled || ioc.operationInProgress} + disabled={ioc.operationInProgress} > {ioc.activeDeployment ? "Deploy revision" : "Deploy"} </Button> @@ -192,7 +189,7 @@ export function IOCManage({ onClick={() => { setUndeployDialogOpen(true); }} - disabled={buttonDisabled || ioc.operationInProgress} + disabled={ioc.operationInProgress} > Undeploy </Button> @@ -208,20 +205,7 @@ export function IOCManage({ allowedRoles={["DeploymentToolAdmin", "DeploymentToolIntegrator"]} renderNoAccess={() => <></>} > - <Stack gap={2}> - <Typography - component="h2" - variant="h3" - > - Operations - </Typography> - <JobTable - jobs={jobs} - pagination={pagination} - onPage={onPage} - loading={jobsLoading} - /> - </Stack> + <JobSection /> <DeployIOC open={deployDialogOpen} setOpen={setDeployDialogOpen} diff --git a/src/components/IOC/IOCManage/JobSection.tsx b/src/components/IOC/IOCManage/JobSection.tsx new file mode 100644 index 00000000..d775c302 --- /dev/null +++ b/src/components/IOC/IOCManage/JobSection.tsx @@ -0,0 +1,43 @@ +import { useEffect } from "react"; +import { Stack, Typography } from "@mui/material"; +import { usePagination } from "@ess-ics/ce-ui-common"; +import { useListJobsQuery } from "../../../store/deployApi"; +import { initRequestParams } from "../../common/Helper"; +import { ROWS_PER_PAGE } from "../../../constants"; +import { JobTable } from "../../Job"; + +export const JobSection = () => { + const { pagination, setPagination } = usePagination({ + rowsPerPageOptions: ROWS_PER_PAGE, + initLimit: ROWS_PER_PAGE[0], + initPage: 0 + }); + + const { data: jobs, isLoading } = useListJobsQuery( + initRequestParams(pagination), + { pollingInterval: 30000 } + ); + + console.log(jobs); //eslint-disable-line + + useEffect(() => { + setPagination({ totalCount: jobs?.totalCount ?? 0 }); + }, [setPagination, jobs?.totalCount]); + + return ( + <Stack gap={2}> + <Typography + component="h2" + variant="h3" + > + Operations + </Typography> + <JobTable + jobs={jobs?.jobs} + pagination={pagination} + onPage={setPagination} + loading={isLoading} + /> + </Stack> + ); +}; diff --git a/src/components/Job/JobTable/JobTable.jsx b/src/components/Job/JobTable/JobTable.jsx index b26018da..e05170b4 100644 --- a/src/components/Job/JobTable/JobTable.jsx +++ b/src/components/Job/JobTable/JobTable.jsx @@ -53,7 +53,7 @@ const createTableRow = (job) => ({ export const JobTable = ({ jobs, - customColumns, + customColumns = null, pagination, onPage, loading diff --git a/src/views/IOC/IOCDetailsView.jsx b/src/views/IOC/IOCDetailsView.jsx index 04184d99..4ff34f23 100644 --- a/src/views/IOC/IOCDetailsView.jsx +++ b/src/views/IOC/IOCDetailsView.jsx @@ -13,10 +13,7 @@ import { import { IOCLiveStatus } from "../../components/IOC/IOCLiveStatus"; import { IOCManage } from "../../components/IOC/IOCManage"; import { IOCAdmin } from "../../components/IOC/IOCAdmin"; -import { - applicationTitle, - initRequestParams -} from "../../components/common/Helper"; +import { applicationTitle } from "../../components/common/Helper"; import { apiContext } from "../../api/DeployApi"; import { ROWS_PER_PAGE } from "../../constants"; @@ -33,16 +30,6 @@ export function IOCDetailsView({ ioc, getIOC, abortGetIOC, loading }) { const navigate = useNavigate(); const client = useContext(apiContext); - const { - value: jobs, - wrapper: getJobs, - loading: jobsLoading, - dataReady: jobsDataReady, - abort: abortGetJobs - } = useAPIMethod({ - fcn: client.apis.Jobs.listJobs, - call: false - }); const ongoingCommandParams = useMemo( () => ({ @@ -73,18 +60,12 @@ export function IOCDetailsView({ ioc, getIOC, abortGetIOC, loading }) { }); const [tabIndex, setTabIndex] = useState(0); - // update pagination whenever search result total pages change - useEffect(() => { - setJobPagination({ totalCount: jobs?.totalCount ?? 0 }); - }, [setJobPagination, jobs?.totalCount]); - // Invoked by Table on change to pagination const onPage = useCallback( (params) => { setJobPagination(params); - abortGetJobs(); }, - [abortGetJobs, setJobPagination] + [setJobPagination] ); usePolling(getIOC, loading, IOC_POLL_INTERVAL, abortGetIOC); @@ -99,23 +80,6 @@ export function IOCDetailsView({ ioc, getIOC, abortGetIOC, loading }) { setButtonDisabled(Boolean(ioc?.operationInProgress)); }, [ioc?.operationInProgress]); - const callGetJobs = useCallback(() => { - let requestParams = initRequestParams(jobPagination); - requestParams.ioc_id = ioc.id; - getJobs(requestParams); - }, [getJobs, ioc.id, jobPagination]); - - // Submit new search whenever pagination or ioc changes - useEffect(() => { - callGetJobs(); - - return () => { - abortGetJobs(); - }; - }, [callGetJobs, abortGetJobs]); - - usePolling(callGetJobs, jobsLoading, 30000, abortGetJobs); - const handleClick = () => { navigate(-1); }; @@ -154,9 +118,6 @@ export function IOCDetailsView({ ioc, getIOC, abortGetIOC, loading }) { currentCommand={ ongoingCommand?.jobs?.length > 0 ? ongoingCommand.jobs[0] : null } - jobs={jobs?.jobs} - jobsLoading={jobsLoading || !jobsDataReady} - getJobs={getJobs} setButtonDisabled={setButtonDisabledAndUpdate} pagination={jobPagination} onPage={onPage} -- GitLab