diff --git a/src/ctx/JobContext.jsx b/src/ctx/JobContext.jsx index 7b70a81..d303b67 100644 --- a/src/ctx/JobContext.jsx +++ b/src/ctx/JobContext.jsx @@ -114,6 +114,7 @@ export const JobProvider = ({ children }) => { const jobReq = { ...request, pipeline: { + ...p, triggers: triggers[t], __test: t, }, @@ -229,7 +230,6 @@ export const JobProvider = ({ children }) => { type: "single", name: jobId, }; - console.log(request); jobCreate(job); diff --git a/src/views/Navbar.jsx b/src/views/Navbar.jsx index 15808b8..7fc2db3 100644 --- a/src/views/Navbar.jsx +++ b/src/views/Navbar.jsx @@ -42,7 +42,13 @@ export default function Navbar(props) { )} , , - + !j.isPipeline).length + + jobState.pipelines.length + } + color="primary" + > , , diff --git a/src/views/jobs/JobPipelineDisplay.jsx b/src/views/jobs/JobPipelineDisplay.jsx index 00600a2..7a652e0 100644 --- a/src/views/jobs/JobPipelineDisplay.jsx +++ b/src/views/jobs/JobPipelineDisplay.jsx @@ -1,26 +1,49 @@ import React, { useContext } from "react"; import { useNavigate } from "react-router-dom"; -import JobContext from "../../ctx/JobContext.jsx"; +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 IconButton from "@mui/material/IconButton"; 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 { back, pipeline } = 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 ); @@ -30,8 +53,11 @@ function JobPipelineDisplay(props) { }); }; + const findJob = (testName) => + pipelineJobs.find((j) => j.branchId === testName); + const selectJob = (testName) => () => { - const job = pipelineJobs.find((j) => j.branchId === testName); + const job = findJob(testName); if (!job) return; navigate(`/qualiteer/jobs#${job.jobId}`); }; @@ -48,6 +74,38 @@ function JobPipelineDisplay(props) { 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; + 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} - - - - - + + @@ -101,13 +156,34 @@ function JobPipelineDisplay(props) { > {test} - I + + + {jobIcon(test)} + + ))} ))} + + + {pipelineActive() ? ( + + + + + Cancel + + ) : null} + + + + + Delete + + ); } diff --git a/src/views/jobs/JobView.jsx b/src/views/jobs/JobView.jsx index 94e95ef..8af2554 100644 --- a/src/views/jobs/JobView.jsx +++ b/src/views/jobs/JobView.jsx @@ -111,19 +111,20 @@ export default function JobView(props) { Download Log - - - {job.status === jobStatus.OK || job.status === jobStatus.ERROR ? ( - - ) : ( - - )} - - - {" "} - {job.status === jobStatus.ERROR ? "Retry" : "Duplicate"} - - + {!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 : ( @@ -134,12 +135,14 @@ export default function JobView(props) { Cancel )} - - - - - Delete - + {!job.isPipeline && ( + + + + + Delete + + )} ); diff --git a/src/views/jobs/Jobs.jsx b/src/views/jobs/Jobs.jsx index fd6d2f5..3be29b0 100644 --- a/src/views/jobs/Jobs.jsx +++ b/src/views/jobs/Jobs.jsx @@ -43,7 +43,6 @@ export default function Jobs() { justifyContent="center" sx={{ flexFlow: "wrap" }} > - {" "} Click the '+' to start a new one! diff --git a/tests/assets/suite/runner.js b/tests/assets/suite/runner.js index 481d9e1..61973b2 100644 --- a/tests/assets/suite/runner.js +++ b/tests/assets/suite/runner.js @@ -31,6 +31,7 @@ const liveIndicator = () => { }; const runTests = () => { + console.log(pipeline); switch (test) { case "primary": return primary(); diff --git a/tests/assets/suite/secondary2.js b/tests/assets/suite/secondary2.js index a95bde9..1f2f2db 100644 --- a/tests/assets/suite/secondary2.js +++ b/tests/assets/suite/secondary2.js @@ -1,5 +1,6 @@ export default function secondaryTest(pipelineData) { console.log("This came from a secondary2 test!"); + console.log(pipelineData, "SomeData"); return { status: +(pipelineData !== "SomeData"), pipelineData: "SomeOtherOtherData", diff --git a/tests/assets/suite/tertiary3.js b/tests/assets/suite/tertiary3.js index f2627ea..b2bbc55 100644 --- a/tests/assets/suite/tertiary3.js +++ b/tests/assets/suite/tertiary3.js @@ -1,4 +1,4 @@ export default function secondaryTest(pipelineData) { console.log("This came from a tertiary3!"); - return { status: +(pipelineData !== "SomeOtherData") }; + return { status: +(pipelineData !== "SomeOtherOtherData") }; }