import { useState } from "react"; import { useParams } from "react-router-dom"; import { Box, Checkbox, FormControl, FormControlLabel, IconButton, InputAdornment, Paper, TextField, useMediaQuery, useTheme, } from "@mui/material"; import { useDebouncedCallback } from "use-debounce"; import TypeQuestions from "../TypeQuestions"; import SwitchQuestionsPage from "../SwitchQuestionsPage"; import { questionStore, updateQuestionsList, createQuestion, copyQuestion, removeQuestion, } from "@root/questions"; import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; import ExpandLessIcon from "@mui/icons-material/ExpandLess"; import DeleteIcon from "@icons/questionsPage/deleteIcon"; import OneIcon from "@icons/questionsPage/OneIcon"; import PointsIcon from "@icons/questionsPage/PointsIcon"; import CopyIcon from "@icons/questionsPage/CopyIcon"; import CrossedEyeIcon from "@icons/CrossedEyeIcon"; import HideIcon from "@icons/questionsPage/hideIcon"; import Answer from "@icons/questionsPage/answer"; import OptionsPict from "@icons/questionsPage/options_pict"; import OptionsAndPict from "@icons/questionsPage/options_and_pict"; import Emoji from "@icons/questionsPage/emoji"; import Input from "@icons/questionsPage/input"; import DropDown from "@icons/questionsPage/drop_down"; import Date from "@icons/questionsPage/date"; import Slider from "@icons/questionsPage/slider"; import Download from "@icons/questionsPage/download"; import Page from "@icons/questionsPage/page"; import RatingIcon from "@icons/questionsPage/rating"; import { ReactComponent as PlusIcon } from "../../../assets/icons/plus.svg"; import type { DraggableProvidedDragHandleProps } from "react-beautiful-dnd"; interface Props { totalIndex: number; draggableProps: DraggableProvidedDragHandleProps | null | undefined; isDragging: boolean; } 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 <>; } }; export default function QuestionsPageCard({ totalIndex, draggableProps, isDragging, }: Props) { const [plusVisible, setPlusVisible] = useState(false); const quizId = Number(useParams().quizId); const theme = useTheme(); const isTablet = useMediaQuery(theme.breakpoints.down(1000)); const isMobile = useMediaQuery(theme.breakpoints.down(790)); const { listQuestions } = questionStore(); const { type: switchState, expanded: isExpanded } = listQuestions[quizId][totalIndex]; const debounced = useDebouncedCallback((title) => { updateQuestionsList(quizId, totalIndex, { title }); }, 1000); return ( <> debounced(target.value)} InputProps={{ startAdornment: ( {IconAndrom(isExpanded, switchState)} ), }} sx={{ "& .MuiInputBase-root": { color: isExpanded ? "#9A9AAF" : "white", backgroundColor: isExpanded ? theme.palette.background.default : "transparent", height: "48px", borderRadius: "10px", ".MuiOutlinedInput-notchedOutline": { borderWidth: "1px !important", }, }, }} inputProps={{ sx: { fontSize: "18px", lineHeight: "21px", py: 0, paddingLeft: switchState.length === 0 ? 0 : "18px", }, }} /> updateQuestionsList(quizId, totalIndex, { expanded: !isExpanded, }) } > {isExpanded ? ( ) : ( )} {isExpanded ? ( <> ) : ( } checkedIcon={} /> } label={""} sx={{ color: theme.palette.grey2.main, ml: "-9px", mr: 0, userSelect: "none", }} /> copyQuestion(quizId, totalIndex)}> removeQuestion(quizId, totalIndex)} > )} {isExpanded && ( {switchState.length === 0 ? ( ) : ( )} )} setPlusVisible(true)} onMouseLeave={() => setPlusVisible(false)} sx={{ maxWidth: "825px", display: "flex", alignItems: "center", height: "40px", cursor: "pointer", }} > createQuestion(quizId, totalIndex + 1)} sx={{ display: plusVisible && !isDragging ? "flex" : "none", width: "100%", alignItems: "center", columnGap: "10px", }} > ); }