import React, { useContext, useState, useEffect } from "react"; import { useNavigate } from "react-router-dom"; import { useJobCore, jobStatus } from "@qltr/jobcore"; import StoreContext from "@qltr/store"; import Box from "@mui/material/Box"; import AppBar from "@mui/material/AppBar"; import Toolbar from "@mui/material/Toolbar"; import IconButton from "@mui/material/IconButton"; import Typography from "@mui/material/Typography"; import Menu from "@mui/material/Menu"; import MenuItem from "@mui/material/MenuItem"; import JobLogView from "./JobLogView.jsx"; import ListItemText from "@mui/material/ListItemText"; import ListItemIcon from "@mui/material/ListItemIcon"; import MoreVertIcon from "@mui/icons-material/MoreVert"; import DownloadIcon from "@mui/icons-material/Download"; import ReplayIcon from "@mui/icons-material/Replay"; import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import DoNotDisturbIcon from "@mui/icons-material/DoNotDisturb"; import DeleteIcon from "@mui/icons-material/Delete"; import PlayArrowIcon from "@mui/icons-material/PlayArrow"; import ViewColumnIcon from "@mui/icons-material/ViewColumn"; export default function JobPipelinePendingView(props) { const navigate = useNavigate(); const { job } = props; const { jobCompose, jobCancel, jobDestroy } = useJobCore(); const { state: store } = useContext(StoreContext); const [anchorEl, setAnchorEl] = React.useState(null); const open = Boolean(anchorEl); const handleClick = (event) => setAnchorEl(event.currentTarget); const handleClose = () => setAnchorEl(null); function download(filename, text) { var element = document.createElement("a"); element.setAttribute( "href", "data:text/plain;charset=utf-8," + encodeURIComponent(text) ); element.setAttribute("download", filename); element.style.display = "none"; document.body.appendChild(element); element.click(); document.body.removeChild(element); } function retryJob() { const jobId = jobCompose(job.builderCache); if (store.focusJob) navigate(`/qualiteer/jobs#${jobId}`); } function downloadLog() { if (job.status === jobStatus.PENDING) return; download(`${job.jobId}.txt`, job.log.join("\n")); } function cancelJob() { jobCancel(job.jobId); } function deleteJob() { jobDestroy(job.jobId); navigateToJobs(); } const menuSelect = (cb) => () => { handleClose(); cb(); }; function navigateToJobs() { if (job.isPipeline) return navigate(`/qualiteer/jobs#p${job.pipelineId}`); navigate("/qualiteer/jobs"); } return ( {job.name} {job.isPipeline && ( )} Download Log {!job.isPipeline && ( {job.status === jobStatus.OK || job.status === jobStatus.ERROR ? ( ) : ( )} {job.status === jobStatus.ERROR ? "Retry" : "Duplicate"} )} {job.status === jobStatus.OK || job.status === jobStatus.ERROR || job.status === jobStatus.CANCELED ? null : ( Cancel )} {!job.isPipeline && ( Delete )} ); }