import React from 'react' import { v2 } from 'api' import { Route, RouteComponentProps, Switch } from 'react-router-dom' import { CardTitle } from 'components/CardTitle' import { Card, Grid, Typography } from '@material-ui/core' import Content from 'components/Content' import { useErrorHandler } from 'hooks/useErrorHandler' import StatusCard from './StatusCard' import { useLoadingPlaceholder } from 'hooks/useLoadingPlaceholder' import RegionalNav from './RegionalNav' import { DirectRequestJobRun, PipelineJobRun } from '../sharedTypes' import { Overview } from './Overview/Overview' import { PipelineJobRunOverview } from './Overview/PipelineJobRunOverview' import { Json } from './Json' import { isOcrJob } from '../utils' import { TaskList } from '../TaskListDag' import { augmentOcrTasksList } from './augmentOcrTasksList' import { transformDirectRequestJobRun, transformPipelineJobRun, } from '../transformJobRuns' function getErrorsList( jobRun: DirectRequestJobRun | PipelineJobRun | undefined, ): string[] { if (jobRun?.type === 'Direct request job run') { return jobRun.taskRuns .filter(({ status }) => status === 'errored') .map((tr) => tr.result.error) .filter((error): error is string => error !== null) } if (jobRun?.type === 'Off-chain reporting job run' && jobRun.errors) { return jobRun.errors.filter((error): error is string => error !== null) } return [] } type Props = RouteComponentProps<{ jobSpecId: string jobRunId: string }> export const Show = ({ match }: Props) => { const [jobRun, setState] = React.useState< DirectRequestJobRun | PipelineJobRun >() const { jobSpecId, jobRunId } = match.params const { error, ErrorComponent, setError } = useErrorHandler() const { LoadingPlaceholder } = useLoadingPlaceholder(!error && !jobRun) React.useEffect(() => { document.title = 'Job run details' }, []) const getJobRun = React.useCallback(async () => { if (isOcrJob(jobSpecId)) { v2.ocrRuns .getJobSpecRun({ jobSpecId, runId: jobRunId }) .then((jobSpecRunResponse) => jobSpecRunResponse.data) .then(transformPipelineJobRun(jobSpecId)) .then(setState) .catch(setError) } else { return v2.runs .getJobSpecRun(jobRunId) .then((jobSpecRunResponse) => jobSpecRunResponse.data) .then(transformDirectRequestJobRun(jobSpecId)) .then(setState) .catch(setError) } }, [jobRunId, jobSpecId, setError]) React.useEffect(() => { getJobRun() }, [getJobRun]) return ( <> {jobRun && ( {getErrorsList(jobRun).length > 0 && ( Errors
    {getErrorsList(jobRun).map((error, index) => (
  • {error}
  • ))}
)} } /> {jobRun.type === 'Direct request job run' && ( } /> )} {jobRun.type === 'Off-chain reporting job run' && ( ( )} /> )}
{jobRun.type === 'Off-chain reporting job run' && ( Task list )}
)}
) } export default Show