frontPanel/src/pages/Questions/answerOptions/AnswerOptions.tsx

180 lines
6.9 KiB
TypeScript
Raw Normal View History

import { Box, Typography, Link, useTheme, TextField, FormControl, InputAdornment, IconButton } from "@mui/material";
import React, { useState } from "react";
import EnterIcon from "../../../assets/icons/questionsPage/enterIcon";
import SwitchAnswerOptions from "./switchAnswerOptions";
import ButtonsOptionsAndPict from "../ButtonsOptionsAndPict";
import QuestionsPageCard from "../QuestionPageCard";
import { useParams } from "react-router-dom";
2023-07-30 16:02:41 +00:00
import { Variants, questionStore, updateQuestionsList } from "@root/questions";
import PointsIcon from "@icons/questionsPage/PointsIcon";
import DeleteIcon from "@icons/questionsPage/deleteIcon";
import MessageIcon from "@icons/messagIcon";
import Popover from "@mui/material/Popover";
import TextareaAutosize from "@mui/base/TextareaAutosize";
2023-07-30 16:02:41 +00:00
// Импортируем интерфейс Varian
interface Props {
totalIndex: number;
}
export default function AnswerOptions({ totalIndex }: Props) {
const { listQuestions } = questionStore();
const Answer = listQuestions[totalIndex].content.variants;
console.log(Answer);
const theme = useTheme();
const [switchState, setSwitchState] = React.useState("setting");
const SSHC = (data: string) => {
setSwitchState(data);
};
2023-07-30 16:02:41 +00:00
const [isOpen, setIsOpen] = React.useState(false);
const [anchorEl, setAnchorEl] = React.useState<HTMLButtonElement | null>(null); // Объявление состояния для anchorEl
const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
setAnchorEl(event.currentTarget);
2023-07-30 16:02:41 +00:00
setIsOpen(true);
};
const handleClose = () => {
2023-07-30 16:02:41 +00:00
setIsOpen(false);
};
2023-07-30 16:02:41 +00:00
const id = "my-popover-id";
return (
<>
<Box sx={{ padding: "0 20px 20px 20px" }}>
{Answer.length === 0 ? (
<Typography
sx={{
padding: "0 0 33px 80px",
fontWeight: 400,
fontSize: "18px",
lineHeight: "21.33px",
color: theme.palette.grey2.main,
}}
>
Добавьте ответ
</Typography>
) : (
<Box>
2023-07-30 16:02:41 +00:00
{Answer.map((variant: Variants, index: number) => (
<FormControl key={index} fullWidth variant="standard" sx={{ p: "0 0 20px 0" }}>
<TextField
2023-07-30 16:02:41 +00:00
value={variant.answer}
fullWidth
placeholder={"Добавьте ответ"}
onChange={(e) => {
2023-07-30 16:02:41 +00:00
const answerNew = Answer.slice(); // Create a shallow copy of the array
answerNew[index].answer = e.target.value;
let clonContent = listQuestions[totalIndex].content;
clonContent.variants = answerNew;
updateQuestionsList(totalIndex, { content: clonContent });
}}
InputProps={{
startAdornment: (
<InputAdornment position="start">
<PointsIcon />
</InputAdornment>
),
endAdornment: (
<InputAdornment position="end">
<IconButton aria-describedby={id} onClick={handleClick}>
<MessageIcon />
</IconButton>
<Popover
id={id}
2023-07-30 16:02:41 +00:00
open={isOpen}
anchorEl={anchorEl}
onClose={handleClose}
anchorOrigin={{
vertical: "bottom",
horizontal: "left",
}}
>
<TextareaAutosize
style={{ margin: "10px" }}
placeholder="Подсказка для этого ответа"
2023-07-30 16:02:41 +00:00
value={variant.hints}
onChange={(e) => {
2023-07-30 16:02:41 +00:00
const answerNew = Answer.slice(); // Create a shallow copy of the array
answerNew[index].hints = e.target.value;
let clonContent = listQuestions[totalIndex].content;
clonContent.variants = answerNew;
updateQuestionsList(totalIndex, { content: clonContent });
}}
/>
</Popover>
<IconButton
onClick={() => {
2023-07-30 16:02:41 +00:00
const answerNew = Answer.slice(); // Create a shallow copy of the array
answerNew.splice(index, 1);
let clonContent = listQuestions[totalIndex].content;
clonContent.variants = answerNew;
updateQuestionsList(totalIndex, { content: clonContent });
}}
>
<DeleteIcon color={theme.palette.grey2.main} />
</IconButton>
</InputAdornment>
),
}}
sx={{
"& .MuiInputBase-root": {
height: "48px",
borderRadius: "10px",
},
}}
inputProps={{
sx: {
borderRadius: "10px",
fontSize: "18px",
lineHeight: "21px",
py: 0,
},
}}
/>
</FormControl>
))}
</Box>
)}
<Box sx={{ display: "flex", alignItems: "center", gap: "10px", marginTop: "10px" }}>
<Link
component="button"
variant="body2"
sx={{ color: theme.palette.brightPurple.main }}
onClick={() => {
2023-07-30 16:02:41 +00:00
const answerNew = Answer.slice(); // Create a shallow copy of the array
answerNew.push({
answer: "",
answerLong: "",
hints: "",
});
let clonContent = listQuestions[totalIndex].content;
clonContent.variants = answerNew;
updateQuestionsList(totalIndex, { content: clonContent });
}}
>
Добавьте ответ
</Link>
<Typography
sx={{
fontWeight: 400,
fontSize: "18px",
lineHeight: "21.33px",
color: theme.palette.grey2.main,
}}
>
или нажмите Enter
</Typography>
<EnterIcon />
</Box>
</Box>
<ButtonsOptionsAndPict switchState={switchState} SSHC={SSHC} totalIndex={totalIndex} />
<SwitchAnswerOptions switchState={switchState} totalIndex={totalIndex} />
</>
);
}