From b04c08e0c725028518dde303322eefcedf7afa4f Mon Sep 17 00:00:00 2001 From: Johanna Szepanski <johanna.szepanski@softhouse.se> Date: Fri, 17 Jan 2025 10:12:33 +0100 Subject: [PATCH] added pagination to batch jobs table --- src/components/Job/JobDetailsBatchJob.jsx | 30 ++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/components/Job/JobDetailsBatchJob.jsx b/src/components/Job/JobDetailsBatchJob.jsx index cad2712e..fdfb6e15 100644 --- a/src/components/Job/JobDetailsBatchJob.jsx +++ b/src/components/Job/JobDetailsBatchJob.jsx @@ -1,9 +1,10 @@ -import { useMemo } from "react"; +import { useMemo, useEffect, useState } from "react"; import { EllipsisText, InternalLink, Table, - SimpleAccordion + SimpleAccordion, + usePagination } from "@ess-ics/ce-ui-common"; import { Typography, Stack } from "@mui/material"; import { @@ -13,6 +14,7 @@ import { calculateHostText } from "./JobUtils"; import { JobRevisionChip } from "./JobRevisionChip"; +import { ROWS_PER_PAGE } from "../../constants"; const columns = [ { @@ -60,6 +62,14 @@ const createRow = (job, action) => { }; export const JobDetailsBatchJob = ({ operation }) => { + const [currentRows, setCurrentRows] = useState([]); + const { pagination, setPagination } = usePagination({ + rowsPerPageOptions: ROWS_PER_PAGE, + initLimit: ROWS_PER_PAGE[0], + initPage: 0, + initTotalCount: operation.jobs.length + }); + const noOfIOCs = useMemo(() => { return getNoOfIOCs(operation.jobs); }, [operation]); @@ -68,6 +78,18 @@ export const JobDetailsBatchJob = ({ operation }) => { return getNoOfHosts(operation.jobs); }, [operation]); + useEffect(() => { + const { limit, page } = pagination; + const list = operation.jobs.reduce((acc, _, index) => { + if (index % limit === 0) { + acc.push(operation.jobs.slice(index, index + limit)); + } + return acc; + }, []); + + setCurrentRows(list[page]); + }, [pagination, setPagination, operation]); + return ( <SimpleAccordion summary={ @@ -98,7 +120,9 @@ export const JobDetailsBatchJob = ({ operation }) => { <Table columns={columns} disableColumnSorting - rows={operation.jobs.map((job) => createRow(job, operation.action))} + rows={currentRows.map((job) => createRow(job, operation.action))} + pagination={pagination} + onPage={setPagination} /> </SimpleAccordion> ); -- GitLab