import { useState } from "react"; import { useParams } from "react-router-dom"; import { Draggable } from "react-beautiful-dnd"; import { Box, TextField, FormControl, InputAdornment, IconButton, Popover, useTheme, useMediaQuery, } from "@mui/material"; import { useDebouncedCallback } from "use-debounce"; import { questionStore, updateQuestionsList } from "@root/questions"; import { PointsIcon } from "@icons/questionsPage/PointsIcon"; import { DeleteIcon } from "@icons/questionsPage/deleteIcon"; import { MessageIcon } from "@icons/messagIcon"; import TextareaAutosize from "@mui/base/TextareaAutosize"; import type { ChangeEvent, KeyboardEvent, ReactNode } from "react"; import type { QuizQuestionVariant } from "../../../model/questionTypes/variant"; import type { QuestionVariant } from "../../../model/questionTypes/shared"; type AnswerItemProps = { index: number; totalIndex: number; variants: QuestionVariant[]; variant: QuestionVariant; additionalContent?: ReactNode; additionalMobile?: ReactNode; icon?: ReactNode; }; export const AnswerItem = ({ index, totalIndex, variants, variant, additionalContent, additionalMobile, }: AnswerItemProps) => { const quizId = Number(useParams().quizId); const { listQuestions } = questionStore(); const theme = useTheme(); const question = listQuestions[quizId][totalIndex] as QuizQuestionVariant; const isTablet = useMediaQuery(theme.breakpoints.down(790)); const debounced = useDebouncedCallback((value) => { const answerNew = variants.slice(); answerNew[index].answer = value; updateQuestionsList(quizId, totalIndex, { content: { ...question.content, variants: answerNew, }, }); }, 1000); const [isOpen, setIsOpen] = useState(false); const [anchorEl, setAnchorEl] = useState(null); const handleClick = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); setIsOpen(true); }; const handleClose = () => { setIsOpen(false); }; const addNewAnswer = () => { const answerNew = variants.slice(); answerNew.push({ answer: "", hints: "", extendedText: "" }); updateQuestionsList(quizId, totalIndex, { content: { ...question.content, variants: answerNew }, }); }; const deleteAnswer = () => { const answerNew = variants.slice(); answerNew.splice(index, 1); updateQuestionsList(quizId, totalIndex, { content: { ...question.content, variants: answerNew }, }); }; const changeAnswerHint = (event: ChangeEvent) => { const answerNew = variants.slice(); answerNew[index].hints = event.target.value; updateQuestionsList(quizId, totalIndex, { content: { ...question.content, variants: answerNew }, }); }; return ( {(provided) => ( debounced(target.value)} onKeyDown={(event: KeyboardEvent) => { if (event.code === "Enter" && !question.content.largeCheck) { addNewAnswer(); } }} InputProps={{ startAdornment: ( <> {additionalContent} ), endAdornment: ( ) => event.stopPropagation()} /> ), }} sx={{ "& .MuiInputBase-root": { padding: additionalContent ? "5px 13px" : "13px", borderRadius: "10px", background: "#ffffff", "& input.MuiInputBase-input": { height: "22px", }, "& textarea.MuiInputBase-input": { marginTop: "1px", }, "& .MuiOutlinedInput-notchedOutline": { border: "none", }, }, }} inputProps={{ sx: { fontSize: "18px", lineHeight: "21px", py: 0, ml: "13px" }, }} /> {additionalMobile} )} ); };