import { ArrowDownIcon } from "@icons/questionsPage/ArrowDownIcon"; import { CopyIcon } from "@icons/questionsPage/CopyIcon"; import CopyIconPurple from "@icons/CopyIcon"; import { PointsIcon } from "@icons/questionsPage/PointsIcon"; import Answer from "@icons/questionsPage/answer"; import Date from "@icons/questionsPage/date"; import { DeleteIcon } from "@icons/questionsPage/deleteIcon"; import Download from "@icons/questionsPage/download"; import DropDown from "@icons/questionsPage/drop_down"; import Emoji from "@icons/questionsPage/emoji"; import Input from "@icons/questionsPage/input"; import OptionsAndPict from "@icons/questionsPage/options_and_pict"; import OptionsPict from "@icons/questionsPage/options_pict"; import Page from "@icons/questionsPage/page"; import RatingIcon from "@icons/questionsPage/rating"; import Slider from "@icons/questionsPage/slider"; import { QuestionType } from "@model/question/question"; import ExpandLessIcon from "@mui/icons-material/ExpandLess"; import { Box, Button, FormControl, IconButton, InputAdornment, Modal, TextField as MuiTextField, TextFieldProps, Typography, useMediaQuery, useTheme, } from "@mui/material"; import { collapseAllQuestions, copyQuestion, deleteQuestion, deleteQuestionWithTimeout, toggleExpandQuestion, updateQuestion, updateUntypedQuestion, } from "@root/questions/actions"; import { DeleteFunction } from "@utils/deleteFunc"; import { FC, memo, useRef, useState } from "react"; import type { DraggableProvidedDragHandleProps } from "react-beautiful-dnd"; import { ChooseAnswerModal } from "./ChooseAnswerModal"; import { enqueueSnackbar } from "notistack"; const TextField = MuiTextField as unknown as FC; const maxLengthTextField = 500; interface Props { draggableProps: DraggableProvidedDragHandleProps | null | undefined; quizId: number; questionId: string; questionBackendId: number; questionContentId: string | null; title: string; questionType: QuestionType | null; page: number | null; isExpanded: boolean; questionHasParent: boolean; } const QuestionPageCardTitle = memo(function ({ draggableProps, quizId, questionId, questionBackendId, questionContentId, title, questionType, page, isExpanded, questionHasParent, }) { const theme = useTheme(); const [open, setOpen] = useState(false); const [isTextFieldtActive, setIsTextFieldtActive] = useState(false); const [openDelete, setOpenDelete] = useState(false); const anchorRef = useRef(null); const isTablet = useMediaQuery(theme.breakpoints.down(1000)); const isMobile = useMediaQuery(theme.breakpoints.down(790)); const setTitle = (title: string) => { const updateQuestionFn = questionType === null ? updateUntypedQuestion : updateQuestion; updateQuestionFn(questionId, (question) => { question.title = title; }); }; const handleInputFocus = () => { setIsTextFieldtActive(true); }; const handleInputBlur = () => { setIsTextFieldtActive(false); }; return ( <> { if (target.value.length > maxLengthTextField) { enqueueSnackbar("Превышена длина вводимого текста") } else { setTitle(target.value || " ") } }} onFocus={handleInputFocus} onBlur={handleInputBlur} inputProps={{ // maxLength: maxLengthTextField, }} InputProps={{ startAdornment: ( setOpen((isOpened) => !isOpened)} > {IconAndrom(isExpanded, questionType)} setOpen(false)} anchorRef={anchorRef} questionId={questionId} questionContentId={questionContentId} questionType={questionType} /> ), endAdornment: isTextFieldtActive && title.length >= maxLengthTextField - 7 && ( {title.length} / {maxLengthTextField} ), }} sx={{ flexGrow: 1, margin: isMobile ? "10px 0" : 0, "& .MuiInputBase-root": { color: "#000000", backgroundColor: isExpanded ? theme.palette.background.default : "transparent", height: "48px", borderRadius: "10px", ".MuiOutlinedInput-notchedOutline": { borderWidth: "1px !important", border: !isExpanded ? "none" : null, }, "& .MuiInputBase-input::placeholder": { color: "#4D4D4D", opacity: 0.8, }, }, }} /> toggleExpandQuestion(questionId)} > {isExpanded ? ( ) : ( )} {isExpanded ? ( <> ) : ( copyQuestion(questionId, quizId)} > { if (questionType === null) { deleteQuestion(questionId); return; } if (questionHasParent) { setOpenDelete(true); } else { deleteQuestionWithTimeout(questionId, () => DeleteFunction(questionId), ); } }} data-cy="delete-question" > setOpenDelete(false)}> Вы удаляете вопрос, участвующий в ветвлении. Все его потомки потеряют данные ветвления. Вы уверены, что хотите удалить вопрос? )} {page !== null && ( {page + 1} )} {questionType !== null && ( ID Вопроса {questionBackendId} navigator.clipboard.writeText( document.querySelector("#id-copy").innerText, ) } > )} ); }); QuestionPageCardTitle.displayName = "QuestionPageCardTitle"; export default QuestionPageCardTitle; const IconAndrom = (isExpanded: boolean, questionType: QuestionType | null) => { switch (questionType) { case "variant": return ( ); case "images": return ( ); case "varimg": return ( ); case "emoji": return ( ); case "text": return ( ); case "select": return ( ); case "date": return ( ); case "number": return ( ); case "file": return ( ); case "page": return ( ); case "rating": return ( ); default: return <>; } };