import React from 'react'; import Typography from 'antd/lib/typography'; import Progress from 'antd/lib/progress'; import List from 'antd/lib/list'; import { timestampToString } from '../utils'; import { Job } from '../server/typing'; interface Props { jobs: Job[]; loadJobs: () => Promise; loadCrawlers: () => Promise; } export const ProjectJobs = ({ jobs, loadJobs, loadCrawlers }: Props) => { const [jobInProgress, setJobInProgress] = React.useState(false); React.useEffect(() => { let timer: NodeJS.Timeout; if (jobs?.length) { !jobInProgress && setJobInProgress(true); timer = setInterval(loadJobs, 30000); // 30 sec } else if (jobInProgress) { setJobInProgress(false); loadCrawlers(); } return () => clearInterval(timer); }, [jobs, loadCrawlers, setJobInProgress, jobInProgress]); return jobs?.length ? ( ( Open , ]} > CI job {timestampToString(startAt.toString())} } description={ <> {!!stepsCount && stepsDone !== undefined && ( `${stepsDone} of ${stepsCount}` } /> )} {status} {' '} {currentStep} } /> )} /> ) : null; };