import { useContext } from "react"; import { useNavigate } from "react-router-dom"; import JobContext from "@qltr/jobctx"; import { jobStatus } from "./job-config.js"; // Icons 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 ReplayIcon from "@mui/icons-material/Replay"; function statusIcon(status) { 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 ; } } export function useJobExtra() { const { state, jobUpdate, jobCreate, jobDelete } = useContext(JobContext); const navigate = useNavigate(); function pipelineJobs(pl) { return state.jobs.filter((j) => j.isPipeline && j.pipelineId === pl.id); } const jobIcon = ({ status }) => statusIcon(status); function pipelineIcon(pl) { const jobStatuses = pipelineJobs(pl).map(({ status }) => status); if (jobStatuses.includes(jobStatus.ERROR)) return statusIcon(jobStatus.ERROR); if (jobStatuses.includes(jobStatus.ACTIVE)) return statusIcon(jobStatus.ACTIVE); if (jobStatuses.includes(jobStatus.PENDING)) return statusIcon(jobStatus.PENDING); if (pl.isCanceled) return statusIcon(jobStatus.CANCELED); if (jobStatuses.includes(jobStatus.OK)) return statusIcon(jobStatus.OK); return statusIcon(jobStatus.QUEUED); } function selectedPipelineBranches(pl) { return pl.branches.map((b) => b.filter((t) => pl.selectedBranches.find((b) => b.name == t.name)) ); } function findPipelineJobByTestName(pl, testName) { return pipelineJobs(pl).find((j) => j.branchId === testName); } // Nav const toJob = (jobId) => navigate(`/qualiteer/jobs#job-${jobId}`); const toPipeline = (plId) => navigate(`/qualiteer/jobs#pipeline-${plId}`); const toJobs = () => navigate(`/qualiteer/jobs`); return { pipelineJobs, jobIcon, pipelineIcon, selectedPipelineBranches, findPipelineJobByTestName, toJob, toPipeline, toJobs, }; }