frontPanel/src/pages/Questions/DropDown/DropDown.tsx

117 lines
3.3 KiB
TypeScript
Raw Normal View History

2023-08-25 10:27:43 +00:00
import { useState } from "react";
2023-09-06 13:20:12 +00:00
import { useParams } from "react-router-dom";
2023-09-15 12:37:12 +00:00
import { Box, Typography, Link, useTheme, useMediaQuery } from "@mui/material";
2023-08-25 10:27:43 +00:00
import { AnswerDraggableList } from "../AnswerDraggableList";
import { questionStore, updateQuestionsList } from "@root/questions";
2023-09-25 13:43:15 +00:00
import { EnterIcon } from "../../../assets/icons/questionsPage/enterIcon";
import SwitchDropDown from "./switchDropDown";
import ButtonsOptions from "../ButtonsOptions";
2023-10-03 14:03:57 +00:00
import type { QuizQuestionSelect } from "../../../model/questionTypes/select";
interface Props {
2023-08-24 11:09:47 +00:00
totalIndex: number;
}
2023-08-24 11:09:47 +00:00
export default function DropDown({ totalIndex }: Props) {
2023-08-25 10:27:43 +00:00
const [switchState, setSwitchState] = useState("setting");
2023-09-06 13:20:12 +00:00
const quizId = Number(useParams().quizId);
2023-08-25 10:27:43 +00:00
const { listQuestions } = questionStore();
2023-08-24 11:09:47 +00:00
const theme = useTheme();
2023-09-15 12:37:12 +00:00
const isMobile = useMediaQuery(theme.breakpoints.down(790));
2023-10-03 14:03:57 +00:00
const question = listQuestions[quizId][totalIndex] as QuizQuestionSelect;
2023-08-24 11:09:47 +00:00
const SSHC = (data: string) => {
setSwitchState(data);
};
2023-08-25 10:27:43 +00:00
const addNewAnswer = () => {
2023-10-03 14:03:57 +00:00
const answerNew = question.content.variants.slice();
2023-10-29 11:21:20 +00:00
answerNew.push({ answer: "", extendedText: "", hints: "" });
2023-08-25 10:27:43 +00:00
2023-10-04 11:35:02 +00:00
updateQuestionsList<QuizQuestionSelect>(quizId, totalIndex, {
2023-10-03 14:03:57 +00:00
content: { ...question.content, variants: answerNew },
2023-08-25 10:27:43 +00:00
});
};
2023-08-24 11:09:47 +00:00
return (
<>
2023-09-21 10:07:30 +00:00
<Box
sx={{
padding: isMobile ? "15px 20px 20px 20px" : "20px 20px 20px 20px ",
}}
>
2023-10-03 14:03:57 +00:00
{question.content.variants.length === 0 ? (
2023-08-25 10:27:43 +00:00
<Typography
sx={{
padding: "0 0 33px 80px",
fontWeight: 400,
fontSize: "18px",
lineHeight: "21.33px",
color: theme.palette.grey2.main,
}}
>
Добавьте ответ
</Typography>
) : (
2023-10-03 14:03:57 +00:00
<AnswerDraggableList
variants={question.content.variants}
totalIndex={totalIndex}
/>
2023-08-25 10:27:43 +00:00
)}
2023-09-26 21:11:27 +00:00
<Box
sx={{
display: "flex",
alignItems: "center",
2023-10-03 14:41:12 +00:00
marginBottom: "20px",
2023-09-26 21:11:27 +00:00
}}
>
2023-08-24 11:09:47 +00:00
<Link
component="button"
variant="body2"
2023-09-26 21:11:27 +00:00
sx={{
color: theme.palette.brightPurple.main,
fontWeight: "400",
fontSize: "16px",
mr: "4px",
height: "19px",
}}
2023-08-25 10:27:43 +00:00
onClick={addNewAnswer}
2023-08-24 11:09:47 +00:00
>
Добавьте ответ
</Link>
2023-09-15 12:37:12 +00:00
{isMobile ? null : (
<>
<Typography
sx={{
fontWeight: 400,
lineHeight: "21.33px",
color: theme.palette.grey2.main,
2023-09-26 21:11:27 +00:00
fontSize: "16px",
2023-09-15 12:37:12 +00:00
}}
>
или нажмите Enter
</Typography>
2023-10-17 10:53:19 +00:00
<EnterIcon
style={{
color: "#7E2AEA",
fontSize: "24px",
marginLeft: "6px",
}}
/>
2023-09-15 12:37:12 +00:00
</>
)}
2023-08-24 11:09:47 +00:00
</Box>
</Box>
2023-10-17 10:53:19 +00:00
<ButtonsOptions
switchState={switchState}
SSHC={SSHC}
totalIndex={totalIndex}
/>
2023-08-24 11:09:47 +00:00
<SwitchDropDown switchState={switchState} totalIndex={totalIndex} />
</>
);
}