frontend/app/JobsList/JobsListContent.tsx (106 lines of code) (raw):
import React from "react";
import {ColDef} from "@material-ui/data-grid";
import FilterButton from "../common/FilterButton";
import JobTypeIcon from "./JobTypeIcon";
import TimestampFormatter from "../common/TimestampFormatter";
import JobStatusIcon from "./JobStatusIcon";
import ResubmitComponent from "./ResubmitComponent";
import {Button, IconButton, Tooltip} from "@material-ui/core";
import {Launch} from "@material-ui/icons";
import {JobEntry} from "../types";
function makeJobsListColumns(filterUpdated: (fieldName:string, values:string, type:"add"|"remove")=>void,
openLog: (logContent:string)=>void,
openItem: (record:JobEntry)=>void,
onError: (errorDesc:string)=>void,
onResubmit: ()=>void,
showRelativeTimes: boolean):ColDef[] {
return [
{
field: "jobId",
headerName: "ID",
sortable: false,
},
{
field: "jobType",
headerName: "Type",
renderCell: (params) => <span>
<FilterButton fieldName="jobType"
values={params.value}
type="plus"
onActivate={()=>params.value ? filterUpdated("jobType", params.value as string,"add") : null}
/>
<FilterButton fieldName="jobType"
values={params.value}
type="minus"
onActivate={()=>params.value ? filterUpdated("jobType", params.value as string,"remove") : null}/>
<JobTypeIcon jobType={params.value}/>
</span>
},
{
field: "startedAt",
headerName: "Start Time",
width: 200,
renderCell: (params)=><TimestampFormatter relative={showRelativeTimes} value={params.value as string}/>
},
{
field: "completedAt",
headerName: "Completion Time",
width: 200,
renderCell: (params)=><TimestampFormatter relative={showRelativeTimes} value={params.value as string}/>
},
{
field: "status",
headerName: "Status",
renderCell: (params)=><span>
<FilterButton fieldName="jobStatus"
values={params.value}
type="plus"
onActivate={()=>params.value ? filterUpdated("status", params.value as string,"add") : null}/>
<FilterButton fieldName="jobStatus"
values={params.value}
type="minus"
onActivate={()=>params.value ? filterUpdated("status", params.value as string,"remove") : null}/>
<JobStatusIcon status={params.value}/>
</span>
},
{
field: "log",
headerName: "Log",
width: 200,
renderCell: (params)=> (!params.value || params.value==="") ? <p>None</p> :
<a style={{cursor: "pointer"}} onClick={()=>openLog(params.value as string)}>View</a>
},
{
field: "resubmitBtn",
headerName: "Resubmit",
width: 150,
renderCell: (params)=>{
const maybeJobType = params.getValue("jobType");
return params.value != undefined ? <ResubmitComponent jobId={params.value as string}
visible={maybeJobType!=undefined}
onFailed={onError}
onSuccess={onResubmit}
/> : <span/>
}
},
{
field: "sourceId",
headerName: "Source file",
width: 400,
renderCell: (params)=> {
const entry = (params.row as unknown) as JobEntry;
return entry.sourceType=="SRC_MEDIA"|| entry.sourceType=="SRC_SCANTARGET" ? <span>
<FilterButton fieldName="sourceId"
values={params.value}
type="plus"
onActivate={params.value ? filterUpdated("sourceId", params.value as string,"add") : null}/>
<FilterButton fieldName="sourceId"
values={params.value}
type="minus"
onActivate={params.value ? filterUpdated("sourceId", params.value as string,"remove") : null}/>
<Tooltip title="View source file in Browse">
<IconButton onClick={()=>openItem(entry)}>
<Launch/>
</IconButton>
</Tooltip>
</span> : <span/>
}
},
{
field: "sourceType",
width: 200,
headerName: "Source type"
}
];
}
export {makeJobsListColumns};