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