import { Box, Checkbox, FormControl, FormControlLabel, IconButton, InputAdornment, Paper, TextField, useMediaQuery, useTheme, } from "@mui/material"; import { useRef, useState } from "react"; import { useDebouncedCallback } from "use-debounce"; import { CrossedEyeIcon } from "@icons/CrossedEyeIcon"; import { ArrowDownIcon } from "@icons/questionsPage/ArrowDownIcon"; import { CopyIcon } from "@icons/questionsPage/CopyIcon"; import { OneIcon } from "@icons/questionsPage/OneIcon"; 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 { HideIcon } from "@icons/questionsPage/hideIcon"; 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 ExpandLessIcon from "@mui/icons-material/ExpandLess"; import { copyQuestion, deleteQuestion, toggleExpandQuestion } from "@root/questions/actions"; import type { DraggableProvidedDragHandleProps } from "react-beautiful-dnd"; import { ReactComponent as PlusIcon } from "../../../assets/icons/plus.svg"; import type { AnyQuizQuestion } from "../../../model/questionTypes/shared"; import SwitchQuestionsPage from "../SwitchQuestionsPage"; import { ChooseAnswerModal } from "./ChooseAnswerModal"; interface Props { question: AnyQuizQuestion; draggableProps: DraggableProvidedDragHandleProps | null | undefined; isDragging: boolean; } export default function QuestionsPageCard({ question, draggableProps, isDragging }: Props) { const [plusVisible, setPlusVisible] = useState(false); const [open, setOpen] = useState(false); const theme = useTheme(); const isTablet = useMediaQuery(theme.breakpoints.down(1000)); const isMobile = useMediaQuery(theme.breakpoints.down(790)); const anchorRef = useRef(null); const debounced = useDebouncedCallback((title) => { // TODO update title // updateQuestionsList(quizId, totalIndex, { title }); }, 200); return ( <> debounced(target.value)} InputProps={{ startAdornment: ( setOpen((isOpened) => !isOpened)} > {IconAndrom(question.expanded, question.type)} setOpen(false)} anchorRef={anchorRef} question={question} switchState={question.type} /> ), }} sx={{ margin: isMobile ? "10px 0" : 0, "& .MuiInputBase-root": { color: "#000000", backgroundColor: question.expanded ? theme.palette.background.default : "transparent", height: "48px", borderRadius: "10px", ".MuiOutlinedInput-notchedOutline": { borderWidth: "1px !important", border: !question.expanded ? "none" : null, }, "& .MuiInputBase-input::placeholder": { color: "#4D4D4D", opacity: 0.8, }, }, }} inputProps={{ sx: { fontSize: "18px", lineHeight: "21px", py: 0, paddingLeft: question.type.length === 0 ? 0 : "18px", }, "data-cy": "quiz-question-title", }} /> toggleExpandQuestion(question.id)} > {question.expanded ? ( ) : ( )} {question.expanded ? ( <> ) : ( } checkedIcon={} /> } label={""} sx={{ color: theme.palette.grey2.main, ml: "-9px", mr: 0, userSelect: "none", }} /> copyQuestion(question.id, question.quizId)} > { // TODO // const removedId = question.id; // if (question.deleteTimeoutId) { // clearTimeout(question.deleteTimeoutId); // } // removeQuestion(quizId, totalIndex); // const newTimeoutId = window.setTimeout(() => { // removeQuestionForce(quizId, removedId); // }, 5000); // updateQuestionsList(quizId, totalIndex, { // ...question, // deleteTimeoutId: newTimeoutId, // }); deleteQuestion(question.id); }} > )} {question.expanded && ( {/* {question.type === "nonselected" ? ( ) : ( */} {/* )} */} )} setPlusVisible(true)} onMouseLeave={() => setPlusVisible(false)} sx={{ maxWidth: "825px", display: "flex", alignItems: "center", height: "40px", cursor: "pointer", }} > createQuestion(quizId, "nonselected", totalIndex + 1)} sx={{ display: plusVisible && !isDragging ? "flex" : "none", width: "100%", alignItems: "center", columnGap: "10px", }} > ); } const IconAndrom = (isExpanded: boolean, switchState: string) => { switch (switchState) { 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 <>; } };