qualiteer/src/views/components/MultiOptionDialog.jsx

81 lines
2.4 KiB
React
Raw Normal View History

2022-05-23 00:24:21 +00:00
import { useState, useRef, useEffect } from "react";
2022-05-17 12:32:04 +00:00
2022-07-06 20:20:27 +00:00
import useMediaQuery from "@mui/material/useMediaQuery";
import { useTheme } from "@mui/material/styles";
2022-05-23 00:24:21 +00:00
import Button from "@mui/material/Button";
import DialogTitle from "@mui/material/DialogTitle";
import DialogContent from "@mui/material/DialogContent";
import DialogActions from "@mui/material/DialogActions";
import Dialog from "@mui/material/Dialog";
import RadioGroup from "@mui/material/RadioGroup";
import Radio from "@mui/material/Radio";
import FormControlLabel from "@mui/material/FormControlLabel";
2022-07-06 20:20:27 +00:00
import Toolbar from "@mui/material/Toolbar";
2022-05-17 12:32:04 +00:00
export default function MultiOptionDialog(props) {
const { dialog: dialogProp, onClose, open, ...other } = props;
const [value, setValue] = useState(dialogProp.current);
const [dialog, setDialog] = useState(dialogProp);
2022-07-06 20:20:27 +00:00
const theme = useTheme();
const fullScreen = useMediaQuery(theme.breakpoints.down("sm"));
2022-05-17 12:32:04 +00:00
const radioGroupRef = useRef(null);
2022-05-23 00:24:21 +00:00
useEffect(() => {
2022-05-17 12:32:04 +00:00
setDialog(dialogProp);
setValue(dialogProp.current);
}, [dialogProp, open]);
const handleEntering = () => {
if (radioGroupRef.current != null) radioGroupRef.current.focus();
};
const handleCancel = () => onClose();
const handleOk = () => onClose(value, dialog.onSelect);
2022-05-23 00:24:21 +00:00
const handleChange = (e) => {
setValue(e.target.value);
};
2022-05-17 12:32:04 +00:00
return (
<Dialog
TransitionProps={{ onEntering: handleEntering }}
open={open}
{...other}
2022-07-06 20:20:27 +00:00
sx={
fullScreen
? {}
: { "& .MuiDialog-paper": { width: "80%", maxHeight: 435 } }
}
fullScreen={fullScreen}
2022-05-17 12:32:04 +00:00
>
2022-07-06 20:20:27 +00:00
<Toolbar sx={{ display: { sm: "none" } }} />
2022-05-17 12:32:04 +00:00
<DialogTitle>{dialog.title}</DialogTitle>
<DialogContent dividers>
<RadioGroup
ref={radioGroupRef}
aria-label={dialogProp.title}
name={dialog.title}
value={value}
onChange={handleChange}
>
{dialog.options.map((option) => (
<FormControlLabel
value={option}
key={option}
control={<Radio />}
label={option}
/>
))}
</RadioGroup>
</DialogContent>
<DialogActions>
<Button autoFocus onClick={handleCancel}>
Cancel
</Button>
<Button onClick={handleOk}>Ok</Button>
</DialogActions>
</Dialog>
);
}