qualiteer/src/views/failing/Failing.jsx

95 lines
2.8 KiB
React
Raw Normal View History

2022-05-17 12:32:04 +00:00
import { useState, useContext } from "react";
2022-07-12 21:48:05 +00:00
import StoreContext from "../../ctx/StoreContext.jsx";
import JobContext from "../../ctx/JobContext.jsx";
import SilenceDialog from "../alerting/SilenceDialog.jsx";
import FailingBox from "./FailingBox.jsx";
2022-05-17 12:32:04 +00:00
2022-05-23 00:24:21 +00:00
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 Button from "@mui/material/Button";
import Dialog from "@mui/material/Dialog";
import DialogActions from "@mui/material/DialogActions";
import DialogContent from "@mui/material/DialogContent";
import DialogContentText from "@mui/material/DialogContentText";
import DialogTitle from "@mui/material/DialogTitle";
2022-05-17 12:32:04 +00:00
2022-05-23 00:24:21 +00:00
import ReplayIcon from "@mui/icons-material/Replay";
2022-05-17 12:32:04 +00:00
export default function Failing() {
2022-05-23 00:24:21 +00:00
const { state: jobState, retryAll, activeJobStates } = useContext(JobContext);
2022-05-17 12:32:04 +00:00
2022-06-22 00:47:19 +00:00
const {
state: store,
updateStore,
silenceRequest,
} = useContext(StoreContext);
2022-05-23 00:24:21 +00:00
const { failing } = store;
2022-06-22 00:47:19 +00:00
const [silenceEntry, setSilenceEntry] = useState({ open: false });
const closeSilence = () => setSilenceEntry({ ...silenceEntry, open: false });
const handleSilenceClose = (silenceReq) => {
closeSilence();
if (!silenceReq) return;
silenceRequest(silenceReq);
};
const editSilence = (silence) => () => {
setSilenceEntry({ ...silence, open: true });
};
2022-05-17 12:32:04 +00:00
const [retryAllOpen, setRetryAllOpen] = useState(false);
const retryAllClick = () => setRetryAllOpen(!retryAllOpen);
2022-06-22 00:47:19 +00:00
2022-05-23 00:24:21 +00:00
const handleClose = (confirmed) => () => {
2022-05-17 12:32:04 +00:00
retryAllClick();
2022-05-23 00:24:21 +00:00
if (!confirmed) return;
retryAll(store.failing);
};
2022-05-17 12:32:04 +00:00
return (
<div className="failing">
2022-05-23 00:24:21 +00:00
{failing.map((v, i) => (
2022-06-22 00:47:19 +00:00
<FailingBox key={i} failingTest={v} silenceClick={editSilence(v)} />
2022-05-23 00:24:21 +00:00
))}
2022-05-17 12:32:04 +00:00
<Dialog
open={retryAllOpen}
onClose={handleClose()}
2022-05-23 00:24:21 +00:00
sx={{ "& .MuiDialog-paper": { width: "80%", maxHeight: 435 } }}
maxWidth="xs"
2022-05-17 12:32:04 +00:00
>
2022-05-23 00:24:21 +00:00
<DialogTitle>Retry all failing tests?</DialogTitle>
2022-05-17 12:32:04 +00:00
<DialogContent>
<DialogContentText>
This will create x jobs and run y tests
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleClose()}>Cancel</Button>
<Button onClick={handleClose(true)} autoFocus>
Yes
</Button>
</DialogActions>
</Dialog>
2022-06-22 00:47:19 +00:00
<SilenceDialog
keepMounted
open={silenceEntry.open}
onClose={handleSilenceClose}
silence={silenceEntry}
/>
2022-05-23 00:24:21 +00:00
<SpeedDial
2022-05-17 12:32:04 +00:00
ariaLabel="Retry All"
2022-05-23 00:24:21 +00:00
sx={{ position: "fixed", bottom: 16, right: 16 }}
2022-05-17 12:32:04 +00:00
icon={<ReplayIcon />}
onClick={retryAllClick}
2022-05-23 00:24:21 +00:00
open={false}
2022-05-17 12:32:04 +00:00
/>
</div>
);
}