import React from 'react' import { Card, Table, TableBody, TableCell, TableHead, TableRow, Typography, } from '@material-ui/core' import { v2 } from 'api' import Button from 'components/Button' import Content from 'components/Content' import { TimeAgo } from 'components/TimeAgo' import { JobData } from './sharedTypes' export const JobsErrors: React.FC<{ error: unknown ErrorComponent: React.FC LoadingPlaceholder: React.FC job?: JobData['job'] setState: React.Dispatch> getJobSpec: () => Promise }> = ({ error, ErrorComponent, getJobSpec, LoadingPlaceholder, job, setState, }) => { React.useEffect(() => { document.title = job?.name ? `${job?.name} | Job errors` : 'Job errors' }, [job]) const handleDismiss = async (jobSpecErrorId: string) => { // Optimistic delete const jobCopy: NonNullable = JSON.parse(JSON.stringify(job)) jobCopy.errors = jobCopy.errors.filter((e) => e.id !== jobSpecErrorId) setState((state) => ({ ...state, job: jobCopy })) await v2.jobSpecErrors.destroyJobSpecError(jobSpecErrorId) await getJobSpec() } const tableHeaders = ['Occurrences', 'Created', 'Last Seen', 'Message'] if (job?.type === 'Direct request') { tableHeaders.push('Actions') } return ( {!error && job && ( {tableHeaders.map((header) => ( {header} ))} {job.errors.length === 0 ? ( No errors ) : ( job.errors.map((jobSpecError) => ( {jobSpecError.occurrences} {jobSpecError.createdAt} {jobSpecError.updatedAt} {jobSpecError.description} {job?.type === 'Direct request' && ( )} )) )}
)}
) } export default JobsErrors