Revamp Job flow

This commit is contained in:
Elijah Dunemask 2022-10-15 11:47:47 +00:00
parent 945afdfbbe
commit 4a0a4b29a5
86 changed files with 592 additions and 608 deletions

View file

@ -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>

View file

@ -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";

View file

@ -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>

View file

@ -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>

View file

@ -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}`);
}

View file

@ -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 (

View file

@ -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";

View file

@ -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?