import React, {useState, useRef, useEffect} from "react"; import AnswerOption from '../AnswerOption/AnswerOption'; import AddAnswerButton from "../AddAnswerButton/AddAnswerButton.tsx"; import TypeDropdown from "../TypeDropdown/TypeDropdown.tsx"; import styles from './QuestionItem.module.css' interface QuestionItemProps { indexQuestion: number; initialTextQuestion?: string; valueQuestion: string; onChangeQuestion: (valueQuestion: string) => void; onDeleteQuestion: (index: number) => void; } const QuestionItem: React.FC = ({indexQuestion, initialTextQuestion = `Вопрос ${indexQuestion}`, valueQuestion, onChangeQuestion, onDeleteQuestion}) => { const [selectedType, setSelectedType] = useState<'single' | 'multiply'>('single'); const [answerOption, setAnswerOption] = useState(['']); const [textQuestion, setTextQuestion] = useState(initialTextQuestion); const [isEditingQuestion, setIsEditingQuestion] = useState(false); const [selectedAnswers, setSelectedAnswers] = useState([]); const textareaQuestionRef = useRef(null); const handleTypeChange = (type: 'single' | 'multiply') => { setSelectedType(type); } const handleAddAnswer = () => { setAnswerOption([...answerOption, '']); }; const handleQuestionClick = () => { setIsEditingQuestion(true); } const handleTextareaQuestionChange = (event: React.ChangeEvent) => { setTextQuestion(event.target.value); if (textareaQuestionRef.current) { textareaQuestionRef.current.style.height = 'auto'; textareaQuestionRef.current.style.height = `${textareaQuestionRef.current.scrollHeight}px`; } } const handleSaveQuestion = () => { setIsEditingQuestion(false); onChangeQuestion(textQuestion); } const handleQuestionKeyDown = (keyDownEvent: React.KeyboardEvent) => { if (keyDownEvent.key === 'Enter') { keyDownEvent.preventDefault(); handleSaveQuestion() } } const handleQuestionBlur = () => { handleSaveQuestion() } useEffect(() => { if (isEditingQuestion && textareaQuestionRef.current) { textareaQuestionRef.current.focus(); textareaQuestionRef.current.style.height = 'auto'; textareaQuestionRef.current.style.height = `${textareaQuestionRef.current.scrollHeight}px`; } }, [isEditingQuestion]); const handleAnswerChange = (index: number, value: string) => { const newAnswerOption = [...answerOption]; newAnswerOption[index] = value; setAnswerOption(newAnswerOption); } const handleDeleteAnswer = (index: number) => { const newAnswerOption = answerOption.filter((_, i) => i !== index); setAnswerOption(newAnswerOption); setSelectedAnswers(selectedAnswers.filter((i) => i !== index)); }; useEffect(() => { setTextQuestion(valueQuestion); }, [valueQuestion]); const handleDeleteQuestion = () => { onDeleteQuestion(indexQuestion); }; const toggleSelect = (index: number) => { if (selectedType === 'single') { setSelectedAnswers([index]); } else { setSelectedAnswers((prev) => { if (prev.includes(index)) { return prev.filter((i) => i !== index); } else { return [...prev, index]; } }); } }; return (
{isEditingQuestion ? (