qualiteer/src/views/alerting/Alerting.jsx

128 lines
3.7 KiB
React
Raw Normal View History

2022-08-06 21:21:41 +00:00
import React, { useState, useContext } from "react";
2022-08-12 13:08:00 +00:00
import { useSilencedAlerts } from "@qltr/queries";
import StoreContext from "@qltr/store";
2022-07-12 21:48:05 +00:00
import SilencedBox from "./SilencedBox.jsx";
import SilenceDialog from "./SilenceDialog.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-08-06 21:21:41 +00:00
import Typography from "@mui/material/Typography";
import Box from "@mui/material/Box";
2022-05-17 12:32:04 +00:00
export default function Alerting() {
2022-08-09 04:29:10 +00:00
const { updateStore, silenceRequest } = useContext(StoreContext);
2022-05-17 12:32:04 +00:00
2022-08-09 04:29:10 +00:00
const { isLoading, data: silenced } = useSilencedAlerts();
2022-08-06 21:21:41 +00:00
2022-06-22 00:47:19 +00:00
const [silenceEntry, setSilenceEntry] = useState({
open: false,
deleteOpen: false,
});
2022-05-17 12:32:04 +00:00
2022-06-22 00:47:19 +00:00
const closeSilence = () =>
setSilenceEntry({ ...silenceEntry, open: false, deleteOpen: false });
const handleDeleteClose = (makeRequest) => () => {
const silenceReq = { ...silenceEntry };
closeSilence();
if (!makeRequest) return;
silenceRequest({ ...silenceReq, silencedUntil: null });
};
const handleClose = (silenceReq) => {
closeSilence();
if (!silenceReq) return;
silenceRequest(silenceReq);
};
const quickAlertClick = () => {
setSilenceEntry({ open: true, deleteOpen: false });
};
const editSilence = (silence) => () => {
setSilenceEntry({ ...silence, open: true, deleteOpen: false });
};
const removeSilence = (silence) => () => {
setSilenceEntry({ ...silence, deleteOpen: true, open: false });
2022-05-23 00:24:21 +00:00
};
2022-05-17 12:32:04 +00:00
return (
<div className="alerting">
2022-08-09 04:29:10 +00:00
{isLoading
? null
: silenced.map((v, i) => (
<SilencedBox
key={i}
silenceEntry={v}
editSilence={editSilence(v)}
removeSilence={removeSilence(v)}
/>
))}
{(silenced ?? []).length === 0 ? (
<React.Fragment>
<Box
display="flex"
alignItems="center"
justifyContent="center"
sx={{ flexFlow: "wrap" }}
>
<Typography variant="h4">No alerts silenced! </Typography>{" "}
</Box>
<Box
display="flex"
alignItems="center"
justifyContent="center"
sx={{ flexFlow: "wrap" }}
>
{" "}
<Typography variant="h5">
Click the '+' to create a new one!
</Typography>
</Box>
2022-08-06 21:21:41 +00:00
</React.Fragment>
2022-08-09 04:29:10 +00:00
) : null}
2022-05-17 12:32:04 +00:00
<Dialog
2022-06-22 00:47:19 +00:00
open={silenceEntry.deleteOpen}
onClose={handleDeleteClose()}
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-06-22 00:47:19 +00:00
<DialogTitle>Resume Alerting</DialogTitle>
<DialogContent>Are you sure you want to resume alerting?</DialogContent>
2022-05-17 12:32:04 +00:00
<DialogActions>
2022-06-22 00:47:19 +00:00
<Button onClick={handleDeleteClose()}>Cancel</Button>
<Button onClick={handleDeleteClose(true)} autoFocus>
Remove
2022-05-17 12:32:04 +00:00
</Button>
</DialogActions>
</Dialog>
2022-06-22 00:47:19 +00:00
<SilenceDialog
keepMounted
open={silenceEntry.open}
onClose={handleClose}
silence={silenceEntry}
/>
2022-05-17 12:32:04 +00:00
<SpeedDial
2022-05-23 00:24:21 +00:00
ariaLabel="Silence Alert"
sx={{ position: "fixed", bottom: 16, right: 16 }}
2022-05-17 12:32:04 +00:00
icon={<SpeedDialIcon />}
onClick={quickAlertClick}
open={false}
/>
</div>
);
}