import React, { useContext } from "react"; import { useNavigate } from "react-router-dom"; import JobContext, { jobStatus } from "../../ctx/JobContext.jsx"; import Box from "@mui/material/Box"; import AppBar from "@mui/material/AppBar"; import Toolbar from "@mui/material/Toolbar"; import Typography from "@mui/material/Typography"; import Accordion from "@mui/material/Accordion"; import AccordionSummary from "@mui/material/AccordionSummary"; import Stack from "@mui/material/Stack"; import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import IconButton from "@mui/material/IconButton"; import CheckIcon from "@mui/icons-material/Check"; import ClearIcon from "@mui/icons-material/Clear"; import ViewColumnIcon from "@mui/icons-material/ViewColumn"; import PendingIcon from "@mui/icons-material/Pending"; import VisibilityIcon from "@mui/icons-material/Visibility"; import DoNotDisturbIcon from "@mui/icons-material/DoNotDisturb"; import Menu from "@mui/material/Menu"; import MenuItem from "@mui/material/MenuItem"; import ListItemText from "@mui/material/ListItemText"; import ListItemIcon from "@mui/material/ListItemIcon"; import MoreVertIcon from "@mui/icons-material/MoreVert"; import DeleteIcon from "@mui/icons-material/Delete"; function JobPipelineDisplay(props) { const { pipeline } = props; const { state: jobState, pipelineCancel, pipelineDestroy, } = useContext(JobContext); const navigate = useNavigate(); const [anchorEl, setAnchorEl] = React.useState(null); const open = Boolean(anchorEl); const handleClick = (event) => { setAnchorEl(event.currentTarget); }; const handleClose = () => { setAnchorEl(null); }; const pipelineJobs = jobState.jobs.filter( (j) => j.isPipeline && j.pipelineId === pipeline.id ); const selectedBranches = () => { return pipeline.branches.map((b) => { return b.filter((t) => pipeline.selectedBranches.includes(t)); }); }; const findJob = (testName) => pipelineJobs.find((j) => j.branchId === testName); const selectJob = (testName) => () => { const job = findJob(testName); if (!job) return; navigate(`/qualiteer/jobs#${job.jobId}`); }; function navigateToJobs() { navigate(`/qualiteer/jobs`); } function cancelPipeline() { pipelineCancel(pipeline.id); } function deletePipeline() { pipelineDestroy(pipeline.id); } const menuSelect = (cb) => () => { handleClose(); cb(); }; function pipelineActive() { return pipelineJobs.find( (j) => j.status === jobStatus.ACTIVE || j.status === jobStatus.PENDING ); } function jobIcon(name) { const job = findJob(name); const status = job ? job.status : null; if (pipeline.isCanceled) return ; switch (status) { case jobStatus.OK: return ; case jobStatus.ERROR: return ; case jobStatus.PENDING: return ; case jobStatus.ACTIVE: return ; case jobStatus.CANCELED: return ; case jobStatus.QUEUED: return ; default: return ; } } return ( {pipeline.id} {selectedBranches().map((track, i) => ( {i + 1} {track.map((test, j) => ( {test} {jobIcon(test)} ))} ))} {pipelineActive() ? ( Cancel ) : null} Delete ); } export default JobPipelineDisplay;