Revamp Job flow
This commit is contained in:
parent
945afdfbbe
commit
4a0a4b29a5
86 changed files with 592 additions and 608 deletions
|
@ -1,6 +1,6 @@
|
|||
import React from "react";
|
||||
|
||||
import { useJobIconState } from "@qltr/util/JobTools";
|
||||
import { useJobCore } from "@qltr/jobcore";
|
||||
import Accordion from "@mui/material/Accordion";
|
||||
import AccordionSummary from "@mui/material/AccordionSummary";
|
||||
import Typography from "@mui/material/Typography";
|
||||
|
@ -10,8 +10,8 @@ import IconButton from "@mui/material/IconButton";
|
|||
import Stack from "@mui/material/Stack";
|
||||
|
||||
export default function JobBox(props) {
|
||||
const { jobIcon } = useJobCore();
|
||||
const { job } = props;
|
||||
|
||||
const { name, status } = job;
|
||||
|
||||
return (
|
||||
|
@ -30,7 +30,7 @@ export default function JobBox(props) {
|
|||
</Typography>
|
||||
<Stack sx={{ ml: "auto" }}>
|
||||
<IconButton aria-label="retry" component="span">
|
||||
{useJobIconState(job)}
|
||||
{jobIcon(job)}
|
||||
</IconButton>
|
||||
</Stack>
|
||||
</AccordionSummary>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React from "react";
|
||||
import { jobStatus } from "@qltr/jobs";
|
||||
import { jobStatus } from "@qltr/jobcore";
|
||||
|
||||
import Box from "@mui/material/Box";
|
||||
import Typography from "@mui/material/Typography";
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import React, { useState, useContext } from "react";
|
||||
import StoreContext from "@qltr/store";
|
||||
import JobContext, { jobStatus } from "@qltr/jobs";
|
||||
import { usePipelineIconState } from "@qltr/util/JobTools";
|
||||
import { useJobCore, jobStatus } from "@qltr/jobcore";
|
||||
|
||||
import Accordion from "@mui/material/Accordion";
|
||||
import AccordionDetails from "@mui/material/AccordionDetails";
|
||||
|
@ -21,7 +20,8 @@ import Stack from "@mui/material/Stack";
|
|||
|
||||
export default function JobPipelineBox(props) {
|
||||
const { pipeline } = props;
|
||||
const pipelineIcon = usePipelineIconState(pipeline);
|
||||
const { pipelineIcon } = useJobCore();
|
||||
const boxIcon = pipelineIcon(pipeline);
|
||||
|
||||
return (
|
||||
<Accordion expanded={false} disableGutters={true} square>
|
||||
|
@ -39,7 +39,7 @@ export default function JobPipelineBox(props) {
|
|||
</Typography>
|
||||
<Stack sx={{ ml: "auto" }}>
|
||||
<IconButton aria-label="" component="span">
|
||||
{pipelineIcon}
|
||||
{boxIcon}
|
||||
</IconButton>
|
||||
</Stack>
|
||||
</AccordionSummary>
|
||||
|
|
|
@ -1,13 +1,6 @@
|
|||
import React, { useContext } from "react";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
import JobContext, { jobStatus } from "@qltr/jobs";
|
||||
import {
|
||||
selectedPipelineBranches,
|
||||
pipelineJobs,
|
||||
findPipelineJobByTestName,
|
||||
useJobIconState,
|
||||
useJobNav,
|
||||
} from "@qltr/util/JobTools";
|
||||
import { useJobCore, jobStatus } from "@qltr/jobcore";
|
||||
|
||||
import Box from "@mui/material/Box";
|
||||
import AppBar from "@mui/material/AppBar";
|
||||
|
@ -31,28 +24,29 @@ import DeleteIcon from "@mui/icons-material/Delete";
|
|||
|
||||
function JobPipelineDisplay(props) {
|
||||
const { pipeline } = props;
|
||||
|
||||
const {
|
||||
state: jobState,
|
||||
pipelineCancel,
|
||||
pipelineDestroy,
|
||||
} = useContext(JobContext);
|
||||
selectedPipelineBranches,
|
||||
pipelineJobs,
|
||||
findPipelineJobByTestName,
|
||||
toJob,
|
||||
jobIcon,
|
||||
} = useJobCore();
|
||||
|
||||
const jobNav = useJobNav();
|
||||
const nav = useNavigate();
|
||||
|
||||
const [anchorEl, setAnchorEl] = React.useState(null);
|
||||
const open = Boolean(anchorEl);
|
||||
const handleClick = (event) => {
|
||||
setAnchorEl(event.currentTarget);
|
||||
};
|
||||
const handleClose = () => {
|
||||
setAnchorEl(null);
|
||||
};
|
||||
const handleClick = (event) => setAnchorEl(event.currentTarget);
|
||||
const handleClose = () => setAnchorEl(null);
|
||||
|
||||
const selectJob = (testName) => () => {
|
||||
const job = findPipelineJobByTestName(pipeline, jobState.jobs, testName);
|
||||
const job = findPipelineJobByTestName(pipeline, testName);
|
||||
if (!job) return;
|
||||
jobNav.toJob(job.jobId);
|
||||
toJob(job.jobId);
|
||||
};
|
||||
|
||||
function cancelPipeline() {
|
||||
|
@ -69,16 +63,16 @@ function JobPipelineDisplay(props) {
|
|||
};
|
||||
|
||||
function pipelineActive() {
|
||||
return pipelineJobs(pipeline, jobState.jobs).find(
|
||||
return pipelineJobs(pipeline).find(
|
||||
(j) => j.status === jobStatus.ACTIVE || j.status === jobStatus.PENDING
|
||||
);
|
||||
}
|
||||
|
||||
function jobIcon(name) {
|
||||
function boxIcon(name) {
|
||||
if (pipeline.isCanceled) return <DoNotDisturbIcon color="warning" />;
|
||||
const job = findPipelineJobByTestName(pipeline, jobState.jobs, name);
|
||||
const job = findPipelineJobByTestName(pipeline, name);
|
||||
if (!job) return <ViewColumnIcon color="secondary" />;
|
||||
return useJobIconState(job);
|
||||
return jobIcon(job);
|
||||
}
|
||||
|
||||
return (
|
||||
|
@ -133,7 +127,7 @@ function JobPipelineDisplay(props) {
|
|||
</Typography>
|
||||
<Stack sx={{ ml: "auto" }}>
|
||||
<IconButton aria-label="retry" component="span">
|
||||
{jobIcon(test.name)}
|
||||
{boxIcon(test.name)}
|
||||
</IconButton>
|
||||
</Stack>
|
||||
</AccordionSummary>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import React, { useContext, useState, useEffect } from "react";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
import JobContext, { jobStatus } from "@qltr/jobs";
|
||||
import { useJobCore, jobStatus } from "@qltr/jobcore";
|
||||
import StoreContext from "@qltr/store";
|
||||
import Box from "@mui/material/Box";
|
||||
import AppBar from "@mui/material/AppBar";
|
||||
|
@ -25,16 +25,12 @@ import ViewColumnIcon from "@mui/icons-material/ViewColumn";
|
|||
export default function JobPipelinePendingView(props) {
|
||||
const navigate = useNavigate();
|
||||
const { job } = props;
|
||||
const { jobFactory, jobCancel, jobDestroy } = useContext(JobContext);
|
||||
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);
|
||||
};
|
||||
const handleClick = (event) => setAnchorEl(event.currentTarget);
|
||||
const handleClose = () => setAnchorEl(null);
|
||||
|
||||
function download(filename, text) {
|
||||
var element = document.createElement("a");
|
||||
|
@ -50,7 +46,7 @@ export default function JobPipelinePendingView(props) {
|
|||
}
|
||||
|
||||
function retryJob() {
|
||||
const jobId = jobFactory(job.builderCache);
|
||||
const jobId = jobCompose(job.builderCache);
|
||||
if (store.focusJob) navigate(`/qualiteer/jobs#${jobId}`);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import React, { useContext, useState, useEffect } from "react";
|
||||
import { useJobNav } from "@qltr/util/JobTools";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
import JobContext, { jobStatus } from "@qltr/jobs";
|
||||
import { useJobCore, jobStatus } from "@qltr/jobcore";
|
||||
import StoreContext from "@qltr/store";
|
||||
import Box from "@mui/material/Box";
|
||||
import AppBar from "@mui/material/AppBar";
|
||||
|
@ -25,18 +24,14 @@ import ViewColumnIcon from "@mui/icons-material/ViewColumn";
|
|||
|
||||
export default function JobView(props) {
|
||||
const { job } = props;
|
||||
const { jobFactory, jobCancel, jobDestroy } = useContext(JobContext);
|
||||
const { jobCompose, jobCancel, jobDestroy, toPipeline, toJob } = useJobCore();
|
||||
const { state: store } = useContext(StoreContext);
|
||||
const jobNav = useJobNav();
|
||||
|
||||
const nav = useNavigate();
|
||||
const [anchorEl, setAnchorEl] = React.useState(null);
|
||||
const open = Boolean(anchorEl);
|
||||
const handleClick = (event) => {
|
||||
setAnchorEl(event.currentTarget);
|
||||
};
|
||||
const handleClose = () => {
|
||||
setAnchorEl(null);
|
||||
};
|
||||
const handleClick = (event) => setAnchorEl(event.currentTarget);
|
||||
const handleClose = () => setAnchorEl(null);
|
||||
|
||||
function download(filename, text) {
|
||||
var element = document.createElement("a");
|
||||
|
@ -52,8 +47,8 @@ export default function JobView(props) {
|
|||
}
|
||||
|
||||
function retryJob() {
|
||||
const jobId = jobFactory(job.builderCache);
|
||||
if (store.focusJob) jobNav.toJob(jobId);
|
||||
const jobId = jobCompose(job.builderCache);
|
||||
if (store.focusJob) toJob(jobId);
|
||||
}
|
||||
|
||||
function downloadLog() {
|
||||
|
@ -76,8 +71,8 @@ export default function JobView(props) {
|
|||
};
|
||||
|
||||
function navigateToJobs() {
|
||||
if (job.isPipeline) return jobNav.toPipeline(job.pipelineId);
|
||||
jobNav.toJobs();
|
||||
if (job.isPipeline) return toPipeline(job.pipelineId);
|
||||
toJobs();
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import React, { useContext, useEffect } from "react";
|
||||
import { useLocation, useNavigate } from "react-router-dom";
|
||||
|
||||
import JobContext from "@qltr/jobs";
|
||||
import JobContext from "@qltr/jobctx";
|
||||
import JobBox from "./JobBox.jsx";
|
||||
import JobPipelineBox from "./JobPipelineBox.jsx";
|
||||
import JobView from "./JobView.jsx";
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import React, { useContext, useState } from "react";
|
||||
import StoreContext from "@qltr/store";
|
||||
import JobContext from "@qltr/jobs";
|
||||
import { useJobNav } from "@qltr/util/JobTools";
|
||||
import { useJobCore } from "@qltr/jobcore";
|
||||
|
||||
import Dialog from "@mui/material/Dialog";
|
||||
import Toolbar from "@mui/material/Toolbar";
|
||||
|
@ -28,8 +27,7 @@ import PipelineConfirm from "./PipelineConfirm.jsx";
|
|||
|
||||
export default function JobBuilder() {
|
||||
const { state: store } = useContext(StoreContext);
|
||||
const { jobFactory } = useContext(JobContext);
|
||||
const jobNav = useJobNav();
|
||||
const { jobCompose } = useJobCore();
|
||||
const [quickOpen, setQuickOpen] = useState(false);
|
||||
const [jobDialogOpen, setJobDialogOpen] = useState(false);
|
||||
|
||||
|
@ -52,8 +50,8 @@ export default function JobBuilder() {
|
|||
const handleClose = (confirmed) => () => {
|
||||
setJobDialogOpen(false);
|
||||
if (!confirmed) return;
|
||||
const jobId = jobFactory({ ...cache, isTriage: store.triageFailing });
|
||||
if (store.focusJob) jobNav.toJob(jobId);
|
||||
const jobId = jobCompose({ ...cache, isTriage: store.triageFailing });
|
||||
if (store.focusJob) toJob(jobId);
|
||||
};
|
||||
|
||||
// Pull info from url if possible?
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue