qualiteer/src/views/Jobs.jsx

105 lines
3.2 KiB
React
Raw Normal View History

2022-06-22 00:47:19 +00:00
import { useState, useContext, useEffect } from "react";
2022-05-17 12:32:04 +00:00
import StoreContext from "../ctx/StoreContext.jsx";
import JobContext from "../ctx/JobContext.jsx";
2022-06-22 00:47:19 +00:00
import JobBox from "./components/JobBox.jsx";
import JobTestSelector from "./components/JobTestSelector.jsx";
import Button from "@mui/material/Button";
import Dialog from "@mui/material/Dialog";
import DialogActions from "@mui/material/DialogActions";
import DialogContent from "@mui/material/DialogContent";
2022-07-06 20:20:27 +00:00
import Toolbar from "@mui/material/Toolbar";
2022-06-22 00:47:19 +00:00
import DialogTitle from "@mui/material/DialogTitle";
2022-05-17 12:32:04 +00:00
2022-05-23 00:24:21 +00:00
import ClickAwayListener from "@mui/material/ClickAwayListener";
import SpeedDial from "@mui/material/SpeedDial";
import SpeedDialAction from "@mui/material/SpeedDialAction";
import SpeedDialIcon from "@mui/material/SpeedDialIcon";
2022-05-17 12:32:04 +00:00
2022-05-23 00:24:21 +00:00
import PageviewIcon from "@mui/icons-material/Pageview";
import ViewColumnIcon from "@mui/icons-material/ViewColumn";
import ViewCarouselIcon from "@mui/icons-material/ViewCarousel";
2022-05-17 12:32:04 +00:00
export default function Jobs() {
const {
state: jobState,
dispatch: jobDispatch,
2022-07-06 20:20:27 +00:00
jobBuilder,
2022-05-17 12:32:04 +00:00
} = useContext(JobContext);
const { state: store, updateStore } = useContext(StoreContext);
const [quickOpen, setQuickOpen] = useState(false);
2022-06-22 00:47:19 +00:00
const [jobDialogOpen, setJobDialogOpen] = useState(false);
2022-05-23 00:24:21 +00:00
2022-05-17 12:32:04 +00:00
const actions = [
2022-05-23 00:24:21 +00:00
{ name: "Suite", icon: <ViewCarouselIcon /> },
{ name: "Compound", icon: <ViewColumnIcon /> },
{ name: "Manual", icon: <PageviewIcon /> },
];
2022-07-06 20:20:27 +00:00
2022-06-22 00:47:19 +00:00
const quickOpenClick = (e) => {
e.preventDefault();
e.stopPropagation();
2022-07-06 20:20:27 +00:00
if (!store.simplifiedControls) return setQuickOpen(!quickOpen);
2022-06-22 00:47:19 +00:00
setJobDialogOpen(true);
2022-07-06 20:20:27 +00:00
};
2022-06-22 00:47:19 +00:00
const quickOpenClose = () => setQuickOpen(false);
const handleClickOpen = () => setJobDialogOpen(true);
2022-07-06 20:20:27 +00:00
2022-06-22 00:47:19 +00:00
const [queued, setQueued] = useState([]);
2022-07-06 20:20:27 +00:00
useEffect(() => {}, [jobState.jobs]);
const handleClose = (confirmed) => () => {
setJobDialogOpen(false);
if (!confirmed) return;
jobBuilder(queued);
};
2022-05-23 00:24:21 +00:00
2022-05-17 12:32:04 +00:00
return (
<div className="jobs">
2022-06-22 00:47:19 +00:00
{jobState.jobs.map((v, i) => (
<JobBox key={i} job={v} />
))}
2022-07-06 20:20:27 +00:00
<Dialog open={jobDialogOpen} onClose={handleClose()} fullScreen>
<Toolbar />
2022-06-22 00:47:19 +00:00
<DialogTitle>New Job</DialogTitle>
<DialogContent>
<span>Some Selectors</span>
2022-07-06 20:20:27 +00:00
<JobTestSelector
queued={queued}
availableTests={store.catalog}
setQueued={setQueued}
/>
2022-06-22 00:47:19 +00:00
</DialogContent>
<DialogActions>
2022-07-06 20:20:27 +00:00
<Button onClick={handleClose()}>Cancel</Button>
<Button onClick={handleClose(true)} autoFocus>
2022-06-22 00:47:19 +00:00
Start
</Button>
</DialogActions>
</Dialog>
2022-05-23 00:24:21 +00:00
<ClickAwayListener onClickAway={quickOpenClose}>
<SpeedDial
ariaLabel="New Job"
sx={{ position: "fixed", bottom: 16, right: 16 }}
icon={<SpeedDialIcon />}
onClick={quickOpenClick}
open={quickOpen}
>
{actions.map((action) => (
<SpeedDialAction
key={action.name}
icon={action.icon}
tooltipTitle={action.name}
2022-06-22 00:47:19 +00:00
onClick={handleClickOpen}
2022-05-23 00:24:21 +00:00
/>
))}
</SpeedDial>
</ClickAwayListener>
2022-05-17 12:32:04 +00:00
</div>
);
}